x86、Interl windows
驱动代码的编写,必须要一个配置编译好的内核
配置的最终目标会生成 .config 文件 ,这个文件会指导makefile把需要用到的东西组织成内核
如何配置树莓派的Linux内核
1.ubuntu交叉编译环境的搭建
2.配置config
树莓派1是bcmrpi_defconfig,树莓派2、3工程是bcm2709_defconfig
使用源码自带的config:ARCH=arm CROSS_COMPILE=arm-linux-gnueablhf-KERNEL=kernel7 make bcm2709_defconfig 此命令功能是获取bcm2709_defconfig的配置到 .config里
驱动两种方式加载
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make bcm2709_defconfig
指定ARM架构 指定编译器 树莓派 主要核心指令
安装必要的库:
sudo apt-get install bc
sudo apt-get install libncurses5-dev libncursesw5-dev
sudo apt-get install zlib1g:i386
sudo apt-get install libc6-i386 lib32stdc++6 lib32gcc1 lib32ncurses5
5.1 编译:
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make -j4 zImage modules dtbs
j4 指定多少电脑进行编译,zImage生成内核镜像 ,modules要生成的驱动模块,dtbs生成配置文 件
5.2 编译成功后,看到源码树目录多了vmlinux,失败则无此文件
成功后,目标zImage镜像arch/arm/boot底下
5.3 打包zImage成树莓派可用的xxx.img
./scripts/mkknlimg arch/arm/boot/zImage ./kernel_new.img
5.4 数据拷贝
(1)挂载U盘
mkdir data1 data2
sudo mount /dev/sdb1 data1 一个fat分区,是boot相关的内容,kernel的img
sudo mount /dev/sdb2 data2 一个是ext4分区,也就是系统的根目录分区。
(2 )安装modules, 设备驱动文件: hdmi usb wifi io 等等
sudo ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make INSTALL_MOD_PATH=/home/zgl/data2 modules_install
(3)安装更新 kernel.img 文件,注意镜像名字是kernel7.img
先备份
cd /home/zgl/data1
cp kernel7.img kernel7OLD.img
再把编译新生成的拷贝到data1,起名kernel7.img
cp kernel_new.img /home/zgl/data1/kernel7.img
(4)复制其他相关文件
cp arch/arm/boot/dts/.*dtb* /home/zgl/data1
cp arch/arm/boot/dts/overlays/.*dtb* /home/zgl/data1/overlays/
cp arch/arm/boot/dts/overlays/README /home/zgl/data1/overlays/
最后将Linux内核镜像拷贝至树莓派并启动新内核