全志R528 系统繁忙时触摸屏I2C报错问题。

最近调试项目时遇到一个奇怪的问题。

当linux 系统繁忙时(开机,关机或APP繁忙等情况),此时按下触摸屏后,

I2C总线就会报错,TP读数据失败,之后内存报错,重启。

root@TinaLinux:/#
root@TinaLinux:/#
root@TinaLinux:/# [  199.777017] sunxi_i2c_drv_core_process()925 - [i2c2] Timeout when sending 9th SCL clk
[  200.847813] i2c_sunxi_drv_complete()1077 - [i2c2] incomplete xfer(status: 0x1, dev addr: 0x38)
[  200.857621] 0x02502a00: 01011001 00000001 00007100 00010021
[  200.864177] 0x02502a10: 000080c0 00010004 01100010 00000001
[  200.870703] hy46xx_ts 2-0038: fhy46xx_i2c_Read: i2c read error.
[  200.877463] hy46xx_ts 2-0038: hy46xx_read_Touchdata read touchdata failed.
[  200.885383] sunxi_i2c_drv_core_process()925 - [i2c2] Timeout when sending 9th SCL clk
[  201.967821] i2c_sunxi_drv_complete()1077 - [i2c2] incomplete xfer(status: 0x1, dev addr: 0x38)
[  201.977597] 0x02502a00: 01011001 00000001 00007100 00010021
[  201.984129] 0x02502a10: 000080c0 00010004 01100010 00000001
[  201.990648] hy46xx_ts 2-0038: fhy46xx_i2c_Read: i2c read error.
[  201.997400] hy46xx_ts 2-0038: hy46xx_read_Touchdata read touchdata failed.
[  202.005290] sunxi_i2c_drv_core_process()925 - [i2c2] Timeout when sending 9th SCL clk
[  203.087847] i2c_sunxi_drv_complete()1077 - [i2c2] incomplete xfer(status: 0x1, dev addr: 0x38)
[  203.097632] 0x02502a00: 01011001 00000001 00007100 00010021
[  203.104146] 0x02502a10: 000080c0 00010004 01100010 00000001
[  203.110665] hy46xx_ts 2-0038: fhy46xx_i2c_Read: i2c read error.
[  203.117391] hy46xx_ts 2-0038: hy46xx_read_Touchdata read touchdata failed.
[  207.567486] sunxi_i2c_drv_core_process()925 - [i2c2] Timeout when sending 9th SCL clk
[  208.607814] i2c_sunxi_drv_complete()1077 - [i2c2] incomplete xfer(status: 0x1, dev addr: 0x38)
[  208.617646] 0x02502a00: 01011001 00000001 00007100 00010021
[  208.624170] 0x02502a10: 000080c0 00010004 01100010 00000001
[  208.630683] hy46xx_ts 2-0038: fhy46xx_i2c_Read: i2c read error.
[  208.637404] hy46xx_ts 2-0038: hy46xx_read_Touchdata read touchdata failed.
[  208.645313] sunxi_i2c_drv_core_process()925 - [i2c2] Timeout when sending 9th SCL clk
[  209.727807] i2c_sunxi_drv_complete()1077 - [i2c2] incomplete xfer(status: 0x1, dev addr: 0x38)
[  209.737654] 0x02502a00: 01011001 00000001 00007100 00010021
[  209.744190] 0x02502a10: 000080c0 00010004 01100010 00000001
[  209.750683] hy46xx_ts 2-0038: fhy46xx_i2c_Read: i2c read error.
[  209.757424] hy46xx_ts 2-0038: hy46xx_read_Touchdata read touchdata failed.
[  221.624975] 8<--- cut here ---
[  221.628575] Unable to handle kernel paging request at virtual address 8201cb00
[  221.636783] pgd = 4d9c9bba
[  221.640006] [8201cb00] *pgd=00000000
[  221.644965] Internal error: Oops: 5 [#1] PREEMPT SMP ARM
[  221.650935] Modules linked in: mt7601Uap(O) esp8089(O) xt_time xt_multiport xt_mark xt_mac xt_limit xt_comment xt_TCPMSS xt_LOG iptable_filter ipt_REJECT fuse disp [last unloaded: mt7601Uap]
[  221.669992] CPU: 0 PID: 1822 Comm: APP Tainted: G           O      5.4.61 #304
[  221.678092] Hardware name: Generic DT based system
[  221.683474] PC is at __kmalloc+0x130/0x194
[  221.688070] LR is at slab_pre_alloc_hook+0x18/0x2c
[  221.693444] pc : [<c01d0c74>]    lr : [<c01ceea8>]    psr: a00f0013
[  221.700472] sp : c46e5d70  ip : e99b5807  fp : c2163a00
[  221.706329] r10: 00009864  r9 : c46e5d70  r8 : c02434d8
[  221.712189] r7 : 00000dc0  r6 : c46e4000  r5 : c7001e00  r4 : 8201cb00
[  221.719510] r3 : 00000000  r2 : 06b73000  r1 : 00009864  r0 : c7001e00
[  221.726829] Flags: NzCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment none
[  221.734838] Control: 10c5387d  Table: 4755806a  DAC: 00000051
[  221.741283] Process APP (pid: 1822, stack limit = 0xaac39cc5)
[  221.747729] Stack: (0xc46e5d70 to 0xc46e6000)
[  221.752617] 5d60:                                     c42cb00c c6e1a708 06bf4962 c537fc40
[  221.761796] 5d80: 90b73236 c46e5dd4 c42cb00c c02434d8 c42cb00c c6e1a708 c46e5e30 00000001
[  221.770973] 5da0: c6e129c0 00000000 00000000 c026ca54 c46e5dd4 c6e129c0 c42cb000 00001000
[  221.780150] 5dc0: 00000000 0000000c c2163a00 c42cbff8 00000064 c42cb014 00000002 6d8c1c09
[  221.789328] 5de0: 00000018 00000000 c6e1a708 00000000 00000000 c2163a00 c6e1a708 c537fc60
[  221.798505] 5e00: 00000000 c026d50c 00000000 00000000 c7508720 c02cc5c8 c0c05608 00000000
[  221.807677] 5e20: 00000000 c01e14dc c71e4800 c0c05608 90b73236 06bf4962 00000004 c72c7894
[  221.816857] 5e40: 00000000 00024800 00000000 c091c7aa 00000043 c7508ed8 000041ed c0c05608
[  221.826032] 5e60: b02fe9a8 6d8c1c09 c0242d6c c46e5f68 c6e1a708 c2163a00 c537fc40 c6089400
[  221.835209] 5e80: c6e1a708 00000000 00000000 c0242ee4 00000000 00000f65 000041ed 00000002
[  221.844387] 5ea0: 00000000 00000000 00000000 00000000 00000000 00000000 00001000 00000000
[  221.853565] 5ec0: 00001000 00000000 00000008 00000000 633112ff 35a4e903 6331138b 1017dfc6
[  221.862743] 5ee0: 6331138b 6d8c1c09 00000f65 c2163a00 00000000 c6e1a708 00000001 c46e5f68
[  221.871921] 5f00: c46e4000 000000d9 b02fefac c01e8bec c2163a00 c46e5f68 c2163900 00000000
[  221.881099] 5f20: c4ba5ba8 00000000 c46e5f68 c46e4000 000000d9 c01e8bec c2163900 c46e5f68
[  221.890276] 5f40: b1b00610 c0c05608 00008000 c2163900 c0101228 c46e4000 000000d9 c01e93ac
[  221.899452] 5f60: c2163900 00000003 c01e8ef8 00000000 00000000 00000000 b1b00610 00000000
[  221.908629] 5f80: 00008000 00000000 00000008 6d8c1c09 000c8930 b1b005f0 b1b005f4 b02ff930
[  221.917807] 5fa0: 000000d9 c0101000 b1b005f0 b1b005f4 0000001b b1b00610 00008000 00000000
[  221.926987] 5fc0: b1b005f0 b1b005f4 b02ff930 000000d9 b1b00610 00000000 000d2af8 b02fefac
[  221.936165] 5fe0: 000f1324 b02fe9f0 b54c2878 b54c27d0 600f0010 0000001b 00000000 00000000
[  221.945359] [<c01d0c74>] (__kmalloc) from [<c02434d8>] (ext4_htree_store_dirent+0x28/0xfc)
[  221.954642] [<c02434d8>] (ext4_htree_store_dirent) from [<c026ca54>] (htree_dirblock_to_tree+0x1bc/0x214)
[  221.965384] [<c026ca54>] (htree_dirblock_to_tree) from [<c026d50c>] (ext4_htree_fill_tree+0x104/0x2bc)
[  221.975835] [<c026d50c>] (ext4_htree_fill_tree) from [<c0242ee4>] (ext4_readdir+0x200/0x790)
[  221.985309] [<c0242ee4>] (ext4_readdir) from [<c01e8bec>] (iterate_dir+0x88/0x130)
[  221.993807] Code: eb154c75 e1a00004 e8bd87f0 e5953014 (e7940003)
[  222.000907] 8<--- cut here ---
[  222.004350] Unable to handle kernel paging request at virtual address 8201cb00
[  222.012573] pgd = 4d9c9bba
[  222.015678] [8201cb00] *pgd=00000000
[  222.019738] Internal error: Oops: 5 [#2] PREEMPT SMP ARM
[  222.025697] Modules linked in: mt7601Uap(O) esp8089(O) xt_time xt_multiport xt_mark xt_mac xt_limit xt_comment xt_TCPMSS xt_LOG iptable_filter ipt_REJECT fuse disp [last unloaded: mt7601Uap]
[  222.044748] CPU: 0 PID: 1822 Comm: APP Tainted: G      D    O      5.4.61 #304
[  222.052848] Hardware name: Generic DT based system
[  222.058247] PC is at kmem_cache_alloc+0xfc/0x160
[  222.063427] LR is at slab_pre_alloc_hook+0x18/0x2c
[  222.068799] pc : [<c01d0dd4>]    lr : [<c01ceea8>]    psr: a0000113
[  222.075826] sp : c46e58c0  ip : 00000040  fp : 00000003
[  222.081685] r10: 00009864  r9 : c46e58c0  r8 : c05b4428
[  222.087544] r7 : 00000a20  r6 : c46e4000  r5 : c7001e00  r4 : 8201cb00
[  222.094865] r3 : 00000000  r2 : 06b73000  r1 : 00009864  r0 : c7001e00
[  222.102188] Flags: NzCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment none
[  222.110192] Control: 10c5387d  Table: 4755806a  DAC: 00000051
[  222.116640] Process APP (pid: 1822, stack limit = 0xaac39cc5)
[  222.123082] Stack: (0xc46e58c0 to 0xc46e6000)
[  222.127974] 58c0: c71a0910 c46e5998 c71a0680 c46e5994 c71e4780 c46e5a1c c46e59f8 c05b4428
[  222.137151] 58e0: c71a0680 c71a0784 c71a0910 00000008 c46e59c0 c05e30b4 c46e59f8 c05b59a0
[  222.146326] 5900: 00000001 c76c6dc0 c707d800 c707d780 c7384b00 c7384b80 c46e5998 c71a0680
[  222.155504] 5920: c46e5994 c46e59c0 c46e59f8 0100007f c71a0680 c05e394c 00000047 00000008
[  222.164682] 5940: c46e5998 c46e5994 00000040 c4532010 c5e07400 000000c0 c4532010 00000000
[  222.173860] 5960: 00000003 c05e3d8c 000000c0 00000000 00000003 00000003 c46e59f8 c0c05608
[  222.183037] 5980: c71a06f0 00000000 c5e0741c c0c05608 c68fc4c0 c71e4780 00000000 00000000
[  222.192214] 59a0: 00000000 00000000 0100007f 00000000 c46e5a1c ffff0000 00000000 00000000
[  222.201391] 59c0: 00000001 00000001 00000000 00010000 00000000 00000000 00000000 00000000
[  222.210563] 59e0: 00000000 00000000 0100007f 0100007f 00000303 00000000 c5e07400 ffffffec
[  222.219742] 5a00: 0000003f 00000303 00000000 c7036cc0 c5e07400 c6a65b28 00000008 6d8c1c09
[  222.228920] 5a20: c09335da 00000000 00000000 00000000 00000000 0000ecd9 00000000 00000000
[  222.238098] 5a40: c5e07400 c05dce20 00000035 00000001 00000000 c73eb160 c5e07400 6d8c1c09
[  222.247274] 5a60: c09335da c5e07400 c4532024 00000000 00000000 00000011 c0c41ac0 c0c085e0
[  222.256453] 5a80: 0000002b c05e0238 c5e0741c 00000001 00000000 c0c085e0 c5e07400 c4080a90
[  222.265630] 5aa0: c5e07400 c4080a80 c46e5ad8 6d8c1c09 0100007f c057e3b4 0100007f 00000001
[  222.274808] 5ac0: c0c05608 6d8c1c09 c05b1118 c5e07400 c0c45c7c c0c41ac0 00000000 c0c08190
[  222.283983] 5ae0: 00000000 00000040 00000040 c05b100c c0c41ac0 c5e07400 00000011 c5e07400
[  222.293164] 5b00: c0c41ac0 c7031000 00000001 c76b86c8 00000000 c05b1178 c0c05608 c05b1210
[  222.302339] 5b20: c7031000 c054441c c5e07400 c5e07400 c0c086a0 6d8c1c09 c76b8770 c5e07400
[  222.311517] 5b40: 00000001 c054460c c76b86c0 c76b8770 c0b456c0 06b73000 00000001 c46e5b7c
[  222.320697] 5b60: c0c4aac9 c054559c 0000012c ffffe185 c0c05608 c0c02d00 c46e4000 c46e5b7c
[  222.329871] 5b80: c46e5b7c c46e5b84 c46e5b84 6d8c1c09 c09335da c46e4000 40000003 00000008
[  222.339051] 5ba0: c46e5bb8 00000003 c0c02080 c0c0208c 00000100 c0102ae4 00000000 c76b142c
[  222.348222] 5bc0: 00400040 0000000a c0b44980 ffffe160 00000004 c0c02d00 00000000 c0b44980
[  222.357400] 5be0: 00000003 00000000 c46e5c38 c090fcae c46e4000 c0c0abb0 00000005 c011da44
[  222.366574] 5c00: 00000000 c010c5fc c8802000 c0c05960 c46e5c38 c8803000 c090fcae c036b854
[  222.375755] 5c20: c010aa88 60000013 ffffffff c46e5c6c c090fcae c01021cc 00000000 c0c51428
[  222.384931] 5c40: 00001080 60000013 c46e5d20 c0c5125c 0000000b c7387080 c090fcae ffffe000
[  222.394108] 5c60: c0c0abb0 00000005 00000000 c46e5c88 c010aa54 c010aa88 60000013 ffffffff
[  222.403285] 5c80: 00000051 bf000000 c46e4210 0000000b c090fc32 60000013 00000000 8201cb00
[  222.412461] 5ca0: c46e5d20 00000005 c609da00 c609da00 00000005 c609da40 00000000 c010f498
[  222.421639] 5cc0: c7387080 c010f1d8 8201cb00 00010000 c46e5d20 00000005 c0c0ad24 8201cb00
[  222.430815] 5ce0: c46e5d20 c02434d8 c46e4000 00009864 c2163a00 c010f330 c6e129c0 5a827999
[  222.439993] 5d00: 6ed9eba1 c024f498 5b6af68f c01d0c74 a00f0013 ffffffff c46e5d54 c0102138
[  222.449166] 5d20: c7001e00 00009864 06b73000 00000000 8201cb00 c7001e00 c46e4000 00000dc0
[  222.458346] 5d40: c02434d8 c46e5d70 00009864 c2163a00 e99b5807 c46e5d70 c01ceea8 c01d0c74
[  222.467521] 5d60: a00f0013 ffffffff 00000051 bf000000 c42cb00c c6e1a708 06bf4962 c537fc40
[  222.476699] 5d80: 90b73236 c46e5dd4 c42cb00c c02434d8 c42cb00c c6e1a708 c46e5e30 00000001
[  222.485877] 5da0: c6e129c0 00000000 00000000 c026ca54 c46e5dd4 c6e129c0 c42cb000 00001000
[  222.495054] 5dc0: 00000000 0000000c c2163a00 c42cbff8 00000064 c42cb014 00000002 6d8c1c09
[  222.504232] 5de0: 00000018 00000000 c6e1a708 00000000 00000000 c2163a00 c6e1a708 c537fc60
[  222.513409] 5e00: 00000000 c026d50c 00000000 00000000 c7508720 c02cc5c8 c0c05608 00000000
[  222.522582] 5e20: 00000000 c01e14dc c71e4800 c0c05608 90b73236 06bf4962 00000004 c72c7894
[  222.531757] 5e40: 00000000 00024800 00000000 c091c7aa 00000043 c7508ed8 000041ed c0c05608
[  222.540932] 5e60: b02fe9a8 6d8c1c09 c0242d6c c46e5f68 c6e1a708 c2163a00 c537fc40 c6089400
[  222.550110] 5e80: c6e1a708 00000000 00000000 c0242ee4 00000000 00000f65 000041ed 00000002
[  222.559287] 5ea0: 00000000 00000000 00000000 00000000 00000000 00000000 00001000 00000000
[  222.568465] 5ec0: 00001000 00000000 00000008 00000000 633112ff 35a4e903 6331138b 1017dfc6
[  222.577643] 5ee0: 6331138b 6d8c1c09 00000f65 c2163a00 00000000 c6e1a708 00000001 c46e5f68
[  222.586821] 5f00: c46e4000 000000d9 b02fefac c01e8bec c2163a00 c46e5f68 c2163900 00000000
[  222.595998] 5f20: c4ba5ba8 00000000 c46e5f68 c46e4000 000000d9 c01e8bec c2163900 c46e5f68
[  222.605174] 5f40: b1b00610 c0c05608 00008000 c2163900 c0101228 c46e4000 000000d9 c01e93ac
[  222.614352] 5f60: c2163900 00000003 c01e8ef8 00000000 00000000 00000000 b1b00610 00000000
[  222.623524] 5f80: 00008000 00000000 00000008 6d8c1c09 000c8930 b1b005f0 b1b005f4 b02ff930
[  222.632702] 5fa0: 000000d9 c0101000 b1b005f0 b1b005f4 0000001b b1b00610 00008000 00000000
[  222.641880] 5fc0: b1b005f0 b1b005f4 b02ff930 000000d9 b1b00610 00000000 000d2af8 b02fefac
[  222.651059] 5fe0: 000f1324 b02fe9f0 b54c2878 b54c27d0 600f0010 0000001b 00000000 00000000
[  222.660253] [<c01d0dd4>] (kmem_cache_alloc) from [<c05b4428>] (ip_setup_cork+0x11c/0x144)
[  222.669437] [<c05b4428>] (ip_setup_cork) from [<c05b59a0>] (ip_append_data.part.11+0x44/0xac)
[  222.679010] [<c05b59a0>] (ip_append_data.part.11) from [<c05e394c>] (icmp_push_reply+0x4c/0x124)
[  222.688867] [<c05e394c>] (icmp_push_reply) from [<c05e3d8c>] (__icmp_send+0x330/0x3a8)
[  222.697753] [<c05e3d8c>] (__icmp_send) from [<c05e0238>] (__udp4_lib_rcv+0x60c/0x6d0)
[  222.706542] [<c05e0238>] (__udp4_lib_rcv) from [<c05b100c>] (ip_protocol_deliver_rcu+0xac/0x1b8)
[  222.716405] [<c05b100c>] (ip_protocol_deliver_rcu) from [<c05b1178>] (ip_local_deliver_finish+0x60/0x6c)
[  222.727052] [<c05b1178>] (ip_local_deliver_finish) from [<c054441c>] (__netif_receive_skb_one_core+0x4c/0x6c)
[  222.738183] [<c054441c>] (__netif_receive_skb_one_core) from [<c054460c>] (process_backlog+0x98/0x13c)
[  222.748629] [<c054460c>] (process_backlog) from [<c054559c>] (net_rx_action+0x11c/0x308)
[  222.757712] [<c054559c>] (net_rx_action) from [<c0102ae4>] (__do_softirq+0x1fc/0x278)
[  222.766503] [<c0102ae4>] (__do_softirq) from [<c011da44>] (irq_exit+0x78/0xd0)
[  222.774620] [<c011da44>] (irq_exit) from [<c010c5fc>] (handle_IPI+0x80/0x168)
[  222.782630] [<c010c5fc>] (handle_IPI) from [<c036b854>] (gic_handle_irq+0x70/0x78)
[  222.791131] [<c036b854>] (gic_handle_irq) from [<c01021cc>] (__irq_svc+0x6c/0xa8)
[  222.799525] Exception stack(0xc46e5c38 to 0xc46e5c80)
[  222.805190] 5c20:                                                       00000000 c0c51428
[  222.814369] 5c40: 00001080 60000013 c46e5d20 c0c5125c 0000000b c7387080 c090fcae ffffe000
[  222.823547] 5c60: c0c0abb0 00000005 00000000 c46e5c88 c010aa54 c010aa88 60000013 ffffffff
[  222.832730] [<c01021cc>] (__irq_svc) from [<c010aa88>] (die+0x214/0x2f4)
[  222.840256] [<c010aa88>] (die) from [<c010f498>] (__do_kernel_fault.part.0+0x60/0x88)
[  222.849048] [<c010f498>] (__do_kernel_fault.part.0) from [<c010f1d8>] (do_page_fault+0x268/0x270)
[  222.859014] [<c010f1d8>] (do_page_fault) from [<c010f330>] (do_DataAbort+0x38/0xb8)
[  222.867605] [<c010f330>] (do_DataAbort) from [<c0102138>] (__dabt_svc+0x58/0x80)
[  222.875901] Exception stack(0xc46e5d20 to 0xc46e5d68)
[  222.881571] 5d20: c7001e00 00009864 06b73000 00000000 8201cb00 c7001e00 c46e4000 00000dc0
[  222.890748] 5d40: c02434d8 c46e5d70 00009864 c2163a00 e99b5807 c46e5d70 c01ceea8 c01d0c74
[  222.899921] 5d60: a00f0013 ffffffff
[  222.903843] [<c0102138>] (__dabt_svc) from [<c01d0c74>] (__kmalloc+0x130/0x194)
[  222.912052] [<c01d0c74>] (__kmalloc) from [<c02434d8>] (ext4_htree_store_dirent+0x28/0xfc)
[  222.921332] [<c02434d8>] (ext4_htree_store_dirent) from [<c026ca54>] (htree_dirblock_to_tree+0x1bc/0x214)
[  222.932073] [<c026ca54>] (htree_dirblock_to_tree) from [<c026d50c>] (ext4_htree_fill_tree+0x104/0x2bc)
[  222.942524] [<c026d50c>] (ext4_htree_fill_tree) from [<c0242ee4>] (ext4_readdir+0x200/0x790)
[  222.952000] [<c0242ee4>] (ext4_readdir) from [<c01e8bec>] (iterate_dir+0x88/0x130)
[  222.960499] Code: eb154c1d e1a00004 e8bd87f0 e5953014 (e7940003)
[  222.967497] ---[ end trace d24442ecf336d28e ]---
[  222.972782] Kernel panic - not syncing: Fatal exception in interrupt
[  222.979931] CPU1: stopping
[  222.982980] CPU: 1 PID: 1319 Comm: logread Tainted: G      D    O      5.4.61 #304
[  222.991469] Hardware name: Generic DT based system
[  222.996863] [<c010e248>] (unwind_backtrace) from [<c010a870>] (show_stack+0x10/0x14)
[  223.005558] [<c010a870>] (show_stack) from [<c0725220>] (dump_stack+0x7c/0x98)
[  223.013667] [<c0725220>] (dump_stack) from [<c010c648>] (handle_IPI+0xcc/0x168)
[  223.021874] [<c010c648>] (handle_IPI) from [<c036b854>] (gic_handle_irq+0x70/0x78)
[  223.030373] [<c036b854>] (gic_handle_irq) from [<c01025b0>] (__irq_usr+0x50/0x80)
[  223.038765] Exception stack(0xc4037fb0 to 0xc4037ff8)
[  223.044432] 7fa0:                                     0000000a b6e287e8 00000000 000000ff
[  223.053609] 7fc0: 00000000 ffff0000 00000000 0204c2c8 bebc0858 bebc0838 0045a12c 00000000
[  223.062785] 7fe0: ffffffff bebc07b8 b6d92d58 b6d9305a 600e0430 ffffffff
[  223.070213] Rebooting in 3 seconds..

  

找了很长时间终于找到原因:

设备树中去掉dma 配置后正常,暂时怀疑可能是dma 和其他地方配置冲突导致的。

&twi2 {
        clock-frequency = <200000>;

        pinctrl-0 = <&twi2_pins_a>;
        pinctrl-1 = <&twi2_pins_b>;
        pinctrl-names = "default", "sleep";
//      twi_drv_used = <1>;
//      dmas = <&dma 45>, <&dma 45>;
//      dma-names = "tx", "rx";
        status = "okay";

  

本文转载于网络 如有侵权请联系删除

相关文章

  • Centos7 利用yum安装卸载软件常用命令「建议收藏」

    大家好,又见面了,我是你们的朋友全栈君。一、使用yum安装和卸载软件,有个前提是yum安装的软件包都是rpm格式的。安装的命令是,yuminstall~,yum会查询数据库,有无这一软件包,如果有,则检查其依赖冲突关系,如果没有依赖冲突,那么最好,下载安装;如果有,则会给出提示,询问是否要同时安装依赖,或删除冲突的包,你可以自己作出判断;删除的命令是,yumremove~,同安装一样,yum也会查询数据库,给出解决依赖关系的提示。其中~代表软件名1.用YUM安装软件包命令:yuminstall~ 2.用YUM删除软件包命令:yumremove~复制二、用yum查询想安装的软件我们常会碰到这样的情况,想安装一个软件,只知道它和某方面有关,但又不能确切知道它的名字。这时yum的查询功能就起作用了。我们可以用yumsearchkeyword这样的命令来进行搜索,比如我们要则安装一个InstantMessenger,但又不知到底有哪些,这时不妨用yumsearchmessenger这样的指令进行搜索,yum会搜索所有可用rpm的描述,列出所有描述中和messeger有关的rpm包,于是我们可

  • python提升篇(一)----必备函数

    也许,机遇不会出现在前进的路上,但返回不是我们的方向。回味与往后经过Python基础篇学习,相信大家一定掌握了不少技能,在这个专题,我们将会与大家一起继续学习Python的点点滴滴,把基础打牢,向着提升迈进。一、去除列表中重复对象 #-*-coding:utf-8-*- #python函数:在列表中移除重复对象 #定义移除重复对象的函数 defyichu_list(oid_list): #定义一个列表存储处理后的列表内容 sample_list=[] #循环取得原来列表中的数据 forindexinoid_list: #检测是否在新的列表中 ifindexnotinsample_list: #没有就添加进去 sample_list.append(index) returnsample_list #返回新的列表(此时已去除了重复的内容) if__name__=="__main__": #定义一个原始列表并且赋值 ori_list=[5,7,10,22,5,7,20,10] new_list=yichu_list(ori_list)#调用函数返回结果 print

  • 【傻瓜教程】Weinview 触摸屏与西门子V20系列变频器MODBUS通讯

    正文此范例将向大家介绍如何应用WeinviewHMI的ModbusRTU协议对西门子V20变频器进行通讯控制。使大家更加熟练的掌握和灵活的应用WeinviewHMI的ModbusRTU通讯协议功能。一、通讯连接:·进行通信用接线时,请将主回路接线与其它的动力线和电力线分开。·通信用接线使用屏蔽线,将屏蔽线包覆连接于变频器的接地端子,对另外一端不进行连接而进行末端处理。有防止干扰引发误动作的效果。二、西门子V20系列变频器通讯参数设置首先对变频器恢复出厂设置:设置P0010=30,P0970=1或21选择设置连接宏为:连接宏Cn011-MODBUSRTU控制选择设定好连接宏为CN011后,设置P0003=3(专家级),修改P2014=0,变频器断电重启三、触摸屏软件通讯参数设置所在位置:本机,PLC类型:MODBUSRTU,RTUoverTCP,接口类型:RS-4852W四、西门子V20变频器地址寄存器根据《西门子V20变频器操作使用手册》,常用寄存器地址,如下表寄存器编号描述访问类型定标系数范围读取写入40026电流读1000-163.83r0027r002740033输出电压读10-

  • 《搜索和推荐中的深度匹配》——2.4 推荐中的潜在空间模型

    接下来,我们简要介绍在潜在空间中执行匹配的代表性推荐方法,包括偏置矩阵分解(BMF)【1】、FactoredItemSimilarityModel(FISM)【2】和分解机(FM)【3】。参阅《深度推荐模型——FM》 2.4.1有偏矩阵分解偏置矩阵分解(BMF)是一种用于预测用户评分的模型【1】,即将推荐形式化为回归任务。它是在NetflixChallenge期间开发的,由于其简单性和有效性而迅速流行起来。匹配模型可以表述为: 参阅《深入理解SparkML:基于ALS矩阵分解的协同过滤算法与源码分析》 2.4.2因子项相似度模型FactoredItemSimilarityModel(FISM)【2】采用基于项目的协同过滤假设,即用户会更喜欢与他们目前选择的项目相似的项目。为此,FISM使用用户选择的项目来代表用户,并将组合项目投影到潜在空间中。FISM的模型公式为: 这迫使正(观察到的)实例的分数大于负(未观察到的)实例的分数,边距为1。另一种成对损失,贝叶斯个性化排名(BPR)【6】损失也被广泛使用: 其中σ(·)表示sigmoid函数,它将分数的差异转换为介于0和

  • 缺乏合格的Linux人才阻碍企业迁移到云端

    即使在商店倒闭和大流行病导致的公司裁员的变化时期,由于IT工作者缺乏Linux技能,大量的技术工作也无法填补。自从大流行以来,已经存在的Linux技术池差距不断扩大,这种结合导致企业计划将本地计算基础迁移到公共云操作的速度减缓或延迟。CloudGuru(ACG)希望填补受过培训的Linux技术人员不断扩大的空白。ACG于今年夏天启动了其新的旗舰云培训平台,以解决需要基于Linux的云培训的技术人员的短缺。它通过基于云的学习平台提供了全面,有效的解决方案。这个新平台部分源于ACG在2019年12月收购LinuxAcademy(LA)时获得的资产。新的ACG平台结合了ACG和LA产品的优点和优势,提供了一种创新的解决方案,可在单个学习者和企业团队之间利用云技术。随着各种规模的企业采用云计算来获得竞争优势,云服务已经急剧增长。实际上,为了应对当前的大流行,有80%的人正在迅速提高云的采用率。IT决策者表示,优化云采用和成熟度的主要挑战是缺乏熟练的人才。86%的人同意,缺乏合格的人才会拖慢今年的云项目。ACG联合创始人兼首席执行官SamKroonenburg表示,传统教育并未为员工提供在IT事

  • 看完这篇文章,还说自己不会使用Zookeeper命令吗

    目录客户端、服务器命令节点属性help命令新增、查询节点修改节点删除节点查看子节点列表查看节点状态监听器权限控制首先说明一下环境,溪源使用zookeeper版本为3.5.10;由于版本不同,命令语法略有差异,提前说明一下,但是基本原理一致,大家可以通过help命令查看自己当前版本的命令语法。客户端、服务器命令切换至zookeeper安装目录下的bin目录输入以下命令启动服务器或者客户端 1.启动ZK服务:./zkServer.shstart 2.查看ZK服务状态:./zkServer.shstatus 3.停止ZK服务:./zkServer.shstop 4.重启ZK服务:./zkServer.shrestart 5.连接内部客户端:./zkCli.sh或者./zkCli.sh-server127.0.0.1(指定连接服务器IP):2181复制节点属性学习zookeeper常用命令之前先介绍一下节点属性的含义。-`cZxid`:当前数据结点创建时的事务ID——针对于`zookeeper`数据结点的管理:我们对结点数据的一些写操作都会导致`zookeeper`自动地为我们去开启一个事务,

  • 服务器被攻击该怎么办 如何加强安全防护

    目前越来越多的服务器被入侵,以及攻击事件频频的发生,像数据被窃取,数据库被篡改,用户数据被脱裤,网站被强制跳转到恶意网站上,网站在百度的快照被劫持,等等的攻击症状层出不穷,当我们的服务器被攻击,被黑的时候我们第一时间该怎么去处理解决呢?如何排查服务器被入侵攻击的痕迹呢?是否有应急处理方案,在不影响网站访问的情况下,很多客户出现以上攻击情况的时候,找到我们SINE安全来处理解决服务器被攻击问题,我们sine安全工程师总结了一套自有的办法,分享给大家,希望大家能在第一时间解决掉服务器被黑的问题。有些客户遇到这种情况,第一时间想到的就是先把服务器关机,通知机房拔掉电源,有的是直接先关闭网站,这些措施只能先解决目前的问题,解决不了问题的根源,所以遇到服务器被攻击的情况,我们应该详细的检查日志,以及入侵痕迹,溯源,查找漏洞,到底是哪里导致的服务器被入侵攻击。首先我们应该从以下方面入手:检查服务器的进程是不是有恶意的进程,以及管理员账号是否被恶意增加,对服务器的端口进行查看,有没有开启多余的端口,再一个对服务器的登陆日志进行检查,服务器的默认开启启动项,服务以及计划任务,检查网站是否存在木马后门,

  • Elasticsearch解决问题之道——请亮出你的DSL!

    0、引言1、啥是ElasticsearchDSL?维基百科定义:领域特定语言(英语:domain-specificlanguage、DSL)指的是专注于某个应用程序领域的计算机语言。又译作领域专用语言。Elasticsearch提供基于JSON的完整查询DSL来定义查询。将QueryDSL视为查询的AST(抽象语法树),由两种类型的子句组成:1、叶子查询子句叶查询子句查找特定字段中的特定值,例如匹配,术语或范围查询。这些查询可以单独使用。2、复合查询子句复合查询子句可以组合其他叶子或复合查询,用于以逻辑方式组合多个查询(例如bool或dis_max查询),或更改其行为(例如constant_score查询)。给个例子,一看就明白。1GET"localhost:9200/_search 2{ 3"query":{ 4"bool":{ 5"must":[ 6{"match":{"title":"Search"}}, 7{"match":{&q

  • 独家专访 | 揭秘LinkedIn总部数据科学战队:技术强者常有,顶级团队胜在软实力

    作者|魏子敏,YaweiXia薛娅菲和Aileen对本文亦有贡献*本文为清华数据科学研究院联合大数据文摘发起的《数据团队建设全景报告》系列专访的第一篇内容。从某种程度上讲,目前硅谷乃至全球最火爆的职业【DataScientist】始于LinkedIn。2008年,LinkedIn的数据科学团队负责人DJPatil和Facebook的JeffHammerbacher分别建立了全世界前两个真正意义上的数据科学团队,并且开始用“数据科学家(datascientist)这个词来描述他们的工作性质。在这之后,DataScience这个行业和DataScientist这个职业逐渐流行开。而要探索数据科学团队的建设,没有哪个团队比LinkedIn及其用户增长部门数据科学团队的负责人周洋更有发言权。2013年加入LinkedIn增长与国际业务部门,周洋带领自己的数据科学团队见证了LinkedIn用户量“稳定且健康”的增长并从数据上提供业务支持,帮助LinkedIn实现全球注册用户从二点五亿到五亿的增长,而他将这些归功于LinkedIn对数据团队的重视和数据驱动的文化氛围。周洋认为,一位合格的数据科学家

  • [linux][kernel]load average详细分析

    前言: 朋友遇到了loadaverage偏高的问题,关于loadaverage的解释,网上也是五花八门,有的说法甚至都有些不负责任。在这里详细分析一下loadaverage。 分析: 1,loadaverage如图,top命令的右上的loadaverage:0.21,0.10,0.04就是题目中要讨论的loadaverage。如图,uptime命令的右侧也是loadaverage。 loadaverage是从哪里来?是怎么计算出来的? 作者大概翻了以procps(代码下载路径http://procps.sourceforge.net/)这包代码: 在procps-3.2.8/proc/sysinfo.c中,其中,#defineLOADAVG_FILE"/proc/loadavg"。 可见,命令中的loadaverage就是/proc/loadavg的前三项数据。 2,loadavg 查看loadavg,共六个参数。下面来分析这几个参数的意义。 代码linux-4.0.4/fs/proc/loadavg.c文件中: 前三个参数(例子中的0.120.080.11

  • picasso图片缓存框架

    picasso是Square公司开源的一个Android图形缓存库,地址http://square.github.io/picasso/,可以实现图片下载和缓存功能。picasso使用简单,如下Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView);  复制主要有以下一些特性:在adapter中回收和取消当前的下载;使用最少的内存完成复杂的图形转换操作;自动的内存和硬盘缓存;图形转换操作,如变换大小,旋转等,提供了接口来让用户可以自定义转换操作;加载载网络或本地资源;代码分析Cache,缓存类Lrucacha,主要是get和set方法,存储的结构采用了LinkedHashMap,这种map内部实现了lru算法(LeastRecentlyUsed近期最少使用算法)。this.map = new LinkedHashMap<String, Bitmap>(0, 0.75f, true);  复制最后一个参数的解释: trueiftheorderingshould

  • 处理线性递推的一些方法

    线性递推 形如 \[F_n=\sum_{i=1}^kF_{n-i}*a_i \]通常情况下给出\(F_{0\ldotsk}\)的值。 矩阵快速幂 适用于\(k\)比较小,\(n\)非常大的情况。 复杂度\(O(k^3logn)\) 特征多项式 用于解决常系数齐次线性递推。 这个可以看做矩阵快速幂的一个优化。 证明 设\(\displaystyleB(x)=x^k-\sum_{i=1}^ka_ix^{k-i}\)。现在要求\(F_n\)的值。设\(G(x)=x^n\%B(x)\),则$\displaystyleF_n=\sum_{i=0}^kg_i*F_i$。 因为 \[x^{2*n}\equiv(x^n)^2\pmod{B(x)} \]所以可以用类似于快速幂的方式求\(x^n\%B(x)\)。 复杂度\(O(k^2logn)\)。 分治FFT 可以发现,这个转移也是一个卷积式子。所以我们可以分治。处理区间\([l,r]\)的时候求出\(f_{l\ldotsmid}\)对\(f_{mid+1\ldotsr}\)的贡献。 复杂度\(O(nlog^2n)\) 多项式求逆 设\(A(x)=\

  • 图片文字识别

    https://blog.csdn.net/qq_37193537/article/details/81335165 1、下载安装包 根据https://github.com/tesseract-ocr/tesseract/wiki,我找到非官方的安装包,好像我只看到64位的安装包http://digi.bib.uni-mannheim.de/tesseract/tesseract-ocr-setup-4.00.00dev.exe,下载后直接安装即可,但是要记得你的安装目录,我们等会配置环境变量要用。 如果不是做英文的图文识别,还需要下载其他语言的识别包https://github.com/tesseract-ocr/tesseract/wiki/Data-Files。 简体字识别包:https://raw.githubusercontent.com/tesseract-ocr/tessdata/4.00/chi_sim.traineddata 繁体字识别包:https://github.com/tesseract-ocr/tessdata/raw/4.0/chi_tra.traine

  • mysql存储引擎的一点学习心得总结

    首先我们应该了解mysql中的一个重要特性——插件式存储引擎,从名字就能够看出在mysql中,用户能够依据自己的需求随意的选择存储引擎。实际上也是这样。即使在同一个数据库中。不同的表也能够使用不同的存储引擎。Mysql中支持的存储引擎有非常多种,这个能够去baidu或者google,本文主要说两种比較经常使用的存储引擎。myisam和innodb。 myisam的特点是 1)索引和数据分开存储,myisam有三个文件(.frm文件,存储表定义;.MYI存储索引 my index。  MYD存储数据 mydata) 2)不支持事务以及外键 3)支持全文索引 4)支持数据压缩(myisam支持3种不同存储格式。静态表,动态表,压缩表) 5)Select和Insert效率较高。所以一般以Select和insert为主的应用使用myisam存储引擎。 6)表锁 innodb的特点 1)支持外键和事务 2)假设非常多是update和delete操作,那么选择innodb是合适的。 3)数据和索引存储在一起。 4)innodb不支持全文索引 5

  • 网络编程之非阻塞connect编写

    一、connect非阻塞编写   TCP连接的建立涉及到一个三次握手的过程,且socket中connect函数需要一直等到客户接收到对于自己的SYN的ACK为止才返回, 这意味着每个connect函数总会阻塞其调用进程至少一个到服务器的RTT时间,而RTT波动范围很大,从局域网的几个毫秒到几百个毫秒甚至广域网上的几秒。 这段时间内,我们可以执行其他处理工作,以便做到并行。在此,需要用到非阻塞connect。 将一个阻塞connect变为非阻塞大概有如下几步: 第一步:将套接字设置为非阻塞模式 设置套接字可以用ioctl()或者fcntl() (1)用ioctl设置 1/*创建套接字*/ 2intsockfd=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); 3//................. 4/*step1:将套接字设置为非阻塞*/ 5flags=1; 6ioctl(sockfd,FIONBIO,&flags);复制 (2)用fcntl函数设置 1#include<unistd.h> 2#include<fcntl

  • 输出重定向和输入重定向

    输出重定向   ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   简单了解一下输出重定向   类型 语法格式 作用 再解释一下 标准输出重定向 命令>文件 以覆盖的方式,把命令的正确输出,输出到指定的文件或者设备中 即将命令的正确输出写入到文件中 命令>>文件 以追加的方式,把命令的正确输出,输出到指定的文件或者设备中 标准错误输出重定向 命令>文件 以覆盖的方式,把命令的错误输出,输出到指定的文件或者设备中 即,如果命令报错了,就把错误信息写入到文件中,否则就什么也不写入 命令>>文件 以追加的方式,把命令的错误输出,输出到指定的文件或者设备中   注:只要看上面的一个表格即可。其实上面的语法几乎不会使用,因为它把正确输出结果和错误输出结果分开了, 使用起来很不方便

  • 键盘输入随机数求和

    importjava.util.Scanner; publicclassinput{ publicstaticvoidmain(String[]args){ //从键盘读取若干整数并求和 intnextValue; intsum=0; Scannersr=newScanner(System.in);//创建从键盘读取数据的对象 sr.useDelimiter("\\s");//设置空格为数据的分隔符 while(sr.hasNextInt())//判断有没有int型的输入 { nextValue=sr.nextInt();//读取从键盘输入的数 sum+=nextValue; } //System.out.println("sum:"+sum); System.out.printf("Sum:%d",sum); sr.close(); } }复制 运行结果 566Sum:17 通过这节课让我学会了如何从键盘端输入数字,并且学会了用hasNextInt来判断是否有整数输入,最终采用printf的输出格式来将结果输出

  • 透明度设置

    HTMLCSS设置透明度 使用rgba设置 rgba(r,g,b,a) r,g,b大家都知道的红,绿,蓝的值,然后a就是指透明度的值,取值范围在0到1之间,1是不透明,0是全透明。 使用rgba是仅仅设置元素的颜色的透明度,不会设置其相关的透明度 使用opacity设置透明度 opacity:value|inhert; value:指透明度的值,范围也是1到0; inherit:指opacity的值从父元素继承 因为opacity具有继承性,既作用于元素本身,也作用于元素内的所有子元素具有透明度; <!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml"><head><metahttp-equiv="Content-Type"content="text/html;charse

  • c# 衍生类和基类的构造顺序

    publicclassMyDeriveClass :MyBaseClass { publicMyDeriveClass() :base() { } intderive_int=1; } publicclassMyBaseClass { publicMyBaseClass() { } intbase_int=1; }复制 varcls=newMyDeriveClass(); 调用顺序如下: derive_int=1; base_int=1; MyBaseClass(); MyDeriveClass(); 考虑MyBaseClass()中有一个属性A为abstract 在MyBaseClass()中可以直接操作这个属性A, 只需要(也应该如此设计)DeriveClass做好override 你需要注意的问题是: 在Field的声明处初始化和在构造函数中初始化的顺序是不一样的。 在Field的声明处初始化总是比构造函数要早执行,且早于基类的Field的声明处初始化和基类的构造函数。  

  • [转]Gnome桌面的录屏插件easyscreencast

    原文地址:https://www.linuxprobe.com/gnome-easyscreencast.html

  • vscode调试webpack的启动和打包部署过程,nodejs调试

    launch.json```{ //使用IntelliSense了解相关属性。  //悬停以查看现有属性的描述。 //欲了解更多信息,请访问:https://go.microsoft.com/fwlink/?linkid=830387 "version":"0.2.0", "configurations":[  {   "type":"node",   "request":"launch",   "name":"launchwebpack-dev-server",   "program":"${workspaceFolder}/node_modules/webpack-dev-server/bin/webpack-dev-server.js",   "args":["--progress","--inline","--config","build/webpac

相关推荐

推荐阅读