Linux驱动开发(1)环境与代码框架
一、以树莓派开发板为例
树莓派是ARM架构的开发板。在烧录好系统之后(树莓派的系统烧录是将系统烧录进sd卡),配置无线网络(用于和开发的计算机进行通信)。
下一步,通信成功之后,就要在自己的计算机(以下简称PC)上进行开发。大致的流程如下:
1、安装交叉编译工具链
先去软件源刷新一下最新的软件清单:
sudo apt-get update
然后安装交叉编译器以及相应的一些依赖工具:
sudo apt-get install gcc-arm-linux-gnueabihf build-essential bc bison flex libssl-dev
(1)交叉编译器 gcc-arm-linux-gnueabihf
(2)build-essential
(3)其他工具
(4)交叉编译器的选择
①选择标准
②交叉编译器命名规则
2、下载对应内核源码
对应的,开发板上烧录的是什么系统,就需要下载对应的内核源码,这里是为了后续驱动开发做准备。
git clone --depth=1 --single-branch -b rpi-5.10.y https://github.com/raspberrypi/linux.git
3、获取开发板内核配置文件
每个开发板对应的系统有差异,所以配置文件所在的地方也有差异。这里采用的是安装内核头文件从而获取内核配置文件的方式。
sudo apt-get install raspberrypi-kernel-headers
安装完成之后,会得到一个目录:
/usr/src/linux-headers-$(uname -r)/
这里uname-r作为参数,表示的是正在运行的 Linux 操作系统的内核版本。
接下来讲整个目录打包,通过网络传到云服务器上
cd /usr/src
tar czf linux-headers.tar.gz linux-headers-$(uname -r)
scp linux-headers.tar.gz <云服务器用户>@<云服务器IP>:~/
在云服务器上解压:(这里以放到~/目录下为例,实际可以放到一个更干净的目录下)
tar xzf linux-headers.tar.gz -C ~/
4、写驱动的makefile
对于解压后的内核的头文件,需要做的就是在写驱动的makefile的时候放到KDIR里面。
obj-m += mydriver.oKDIR := /home/xxx/linux-headers-5.10.63-v7l+ # 解压的内核头文件目录
PWD := $(shell pwd)all:$(MAKE) -C $(KDIR) M=$(PWD) ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- modules
这样就能正常编译驱动文件了。