如何来配置树莓派linux的内核:
linux源码中有很多工程
配置config
树莓派的2,3的工程是bcm2709_defconfig。
交叉编译:
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make bcm2709_defconfig
此命令功能是获取bcm2709_defconfig的配置到 .config里。
我们可以直接用工程里的配置,但这样的话可能会丢失原来使用的树莓派的配置,这里提供一个方法可以获取当前正在使用的树莓派的config。
之后,所有的make命令都要指明一些环境变量:
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7
ARCH=arm 指明当前要编译arm,虽然树莓派是64位的,这里仍然选择arm,而不是arm64。
CROSS_COMPILE 指明交叉工具链名称。
KERNEL 指明kernel类型,树莓派1设置为kernel,树莓派2、3设置为kernel7。
驱动两种加载方式:
*编译进内核 ZImage包含了驱动
M 以模块的方式编译进内核 ,inmosd 文件名.ko
内核配置:
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make menuconfig
指定 arm架构 指定编译器 树莓派内核类型 主要核心指令
编译出来的内核才真正适合树莓派的
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make -j4 zImage modules dtbs
make -j4:指定你的电脑用多少资源来编译4线程(核)
zImage:生成zImage文件
modules;驱动模块都要生成
dtbs:配置文件等等
3、打包zImage文件
直接用linux源码包里的工具:
./scripts/mkknlimg arch/arm/boot/zImage ./kernel_new.img
在本目录生成一个kernel_new.img文件,这个文件就是要放到sd卡中的文件。
编译成功后,看到源码树目录下多了vmlinux,失败则无此文件
成功后,看到zImage镜像arch/arm/boot下
打包成功后会出现树莓派可用的kernel_new.img镜像
5、挂载树莓派sd卡,并安装编译出的DIRECTLY 到sd卡
把树莓派的sd卡插入ubuntu系统电脑,树莓派的sd卡有两个分区:
一个fat分区,是boot相关的内容,kernel的img文件就放在这个分区里;
一个是ext4分区,也就是系统的根目录分区。**
我们生成的文件涉及到这两个分区的内容,一般插入ubuntu后会自动挂载,fat分区可以不用root权限操作,ext4分区需要root权限操作。
两个分区具体挂载在什么地方可以自己决定,以下用[fat]表示boot挂载的路径,[ext4]表示ext4挂载的路径。
**1、安装modules,设备驱动文件:hdmi视频,usb ,wifi,io口。。。。
sudo ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make INSTALL_MOD_PATH=/home/hyb/data2 modules_install
操作根目录分区,需要root权限。**
2、安装、更新 kernel.img 文件
备份树莓派的镜像文件
MD5sum 文件名 该命令查看文件的特殊的编码,唯一的编码号,防止拷贝的时候拷坏了
3、复制其他相关文件
直接覆盖
cp arch/arm/boot/dts/.dtb /home/hyb/data1
cp arch/arm/boot/dts/overlays/.dtb /home/hyb/data1/overlays/
cp arch/arm/boot/dts/overlays/README /home/hyb/data1/overlays/
更新完成后插回树莓派即可开机,开机后可以用 uname -a 命令查看kernel信息已经改变。