1、不要只会用printk
除了printk
,内核里面有很多pr_info
、pr_err
等打印函数,要学会控制打印等级,以及针对不同的场景使用不同的打印函数。
2、新手不要直接改defconfig
内核有默认配置文件xxx_defconfig
,如果你要修改内核的一些配置,作为新手不要直接去修改xxx_defconfig。
稳妥的做法是执行make menucofig
通常菜单进行配置,最后把.config
文件覆盖掉xxx_defconfig
,然后再上传这个xxx_defconfig
。
3、不要直接映射每一个物理地址
Linux下操作寄存器一定要先映射,但是通常只映射基地址,通过基址加偏移的方式操作。
不要直接去映射每一个寄存器的物理地址,因为对于某一个驱动,虽然有很多寄存器,但基址都是一样的。
4、不要不学uboot
即便你是Linux驱动岗,uboot
怎么启动kernel
,都传了什么参数,涉及到的地址有哪些,uboot
的驱动怎么写这些必须知道。
5、不懂内存,不足以谈驱动
一定要多看看内存相关的知识。Linux下操作的都是虚拟地址,写进寄存器的是物理地址,怎么知道虚拟地址对应的物理地址?分配dma一致性内存和分配普通内存有什么区别?
寄存器手册写的地址是物理地址,给我记住了。
dma内存问题,缓存一致性问题等,这些你都逃不掉。