1、Linux 设备驱动的重点难点
1、编写Linux设备驱动要求工程师有非常好的硬件基础,懂得SRAM、Flash、SDRAM、磁盘读写方式,UART、I2C、USB等设备的借口以及轮询、中断、DMA的原理,PCI总线的工作方式以及CPU的内存管理单元MMU等。
2、编写Linux设备驱动要求工程师有非常好的C语言基础,能够灵活运用C语言的结构体、指针、函数指针以及内存动态申请和释放等。
3、有一定的内核基础,虽然不要求对各个部分深入研究,但是至少要明白驱动和内核的接口。尤其是对块设备、网络设备、Flash设备、串口设备。
4、编写Linux设备驱动要求工程师有非常好的多任务并发控制和同步基础,因为驱动中需要大量使用自旋锁、互斥、信号量、等待队列等并发和同步机制
2、工具链安装
在驱动移植的时候,需要交叉编译,此时需要安装工具链
1、获取工具链,一般需要从个硬件平台厂商下载
2、解压并存放目录(例:、usr/local/arm/4.2.2-eabi)
3、设置环境变量:编辑/etc/profile文件,在文件末尾添加:
PATH=“$PATH:/usr/local/4.2.2-eabi/usr/bin”
export PATH
是环境变量生效,在终端输入命令
source /etc/profile
另外、也可以修改HOME目录下的.bashrc 来将/usr/local/4.2.2-eabi/usr/bin 添加到PATH中:
export PATH=PATH:/usr/local/4.2.2-eabi/usr/bin/:$PATH
4、检测环境变量是否设置成功
在终端输入:echo $PATH,如果输出的路径中包含了/usr/local/4.2.2-eabi/usr/bin 则说明设置成功。
5、测试交叉编译工具链
在终端输入命令”arm-linux-gcc -v“
3、主机端nfs和tftp服务安装
4、源代码阅读和编辑
Linux环境下常见的方式Vim+cscope或者Vim+ctags(使用方法待补充)