rv1126 驱动知识点总结

1:主设备号和次设备号

为了方便管理,Linux 中每个设备都有一个设备号,设备号由主设备号和次设备号两部分
组成,主设备号表示某一个具体的驱动,次设备号表示使用这个驱动的各个设备。

2:dts和dtsi

一个 SOC 可以作出很多不同的板子,
这些不同的板子肯定是有共同的信息,将这些共同的信息提取出来作为一个通用的文件,其他
的.dts 文件直接引用这个通用文件即可,这个通用文件就是.dtsi 文件,类似于 C 语言中的头文
件。一般.dts 描述板级信息(也就是开发板上有哪些 IIC 设备、SPI 设备等),.dtsi 描述 SOC 级信
息(也就是 SOC 有几个 CPU、主频是多少、各个外设控制器信息等)。

3:设备树的编译和反编译

sudo dtc -I dtb -O dts kernel_tegra194-p2888-0001-p2822-0000.dtb > kernel_tegra194-p2888-0001-p2822-0000.dts
 
sudo dtc -I dts -O dtb kernel_tegra194-p2888-0001-p2822-0000.dts > kernel_tegra194-p2888-0001-p2822-0000.dtb

4:bootargs解析

传递给 Linux 内核的
bootargs uboot bootargs 环境变量的值加设备树里面 bootargs 属性的值。这个通过查看 linux
内核的 cmdline(命令行)参数来得到
5 自旋锁API函数适用于SMP或支持抢占的单CPU下线程之间的并发访问
也就是用于线程与线程之间,被自旋锁保护的临界区一定不能调用任何能够引起睡眠和阻塞的
API 函数,否则的话会可能会导致死锁现象的发生。自旋锁会自动禁止抢占,也就说当线程 A
得到锁以后会暂时禁止内核抢占。如果线程 A 在持有锁期间进入了休眠状态,那么线程 A 会自
动放弃 CPU 使用权。线程 B 开始运行,线程 B 也想要获取锁,但是此时锁被 A 线程持有,而
且内核抢占还被禁止了!线程 B 无法被调度出去,那么线程 A 就无法运行,锁也就无法释放,
好了,死锁发生了!
6 锁和中断
线程之间的并发访问,如果此时中断也要插一脚,中断也想
访问共享资源,那该怎么办呢?首先可以肯定的是,中断里面可以使用自旋锁,但是在中断里
面使用自旋锁的时候,在获取锁之前一定要先禁止本地中断(也就是本 CPU 中断,对于多核 SOC
来说会有多个 CPU ),否则可能导致锁死现象的发生
线程 A 先运行,并且获取到了 lock 这个锁,当线程 A 运行 functionA
数的时候中断发生了,中断抢走了 CPU 使用权。右边的中断服务函数也要获取 lock 这个锁,
但是这个锁被线程 A 占有着,中断就会一直自旋,等待锁有效。但是在中断服务函数执行完之
前,线程 A 是不可能执行的,线程 A 说“你先放手”,中断说“你先放手”,场面就这么僵持着,
死锁发生!最好的解决方法就是获取锁之前关闭本地中断!!!!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值