目录
1. 安装适合的编译器。
2. 树莓派linux源码配置
2.1 基本概念
2.2 内核配置
3. 树莓派linux内核编译
4. 测试树莓派是否正常启动
更具体的参考博文 :https://blog.csdn.net/nicekwell/article/details/78482833
1. 安装适合的编译器。
配置好交叉编译工具链:
https://blog.csdn.net/jinchi_boke/article/details/117822476
得到这个交叉编译工具:arm-linux-gnueabihf
2. 树莓派linux源码配置
2.1 基本概念
linux源码中有很多工程:
树莓派1的工程是 bcmrpi_defconfig
树莓派2、3的工程是 bcm2709_defconfig
驱动代码的编写
驱动代码的编译需要一个提前编译好的内核
编译内核就必须配置
配置的最终目标会生成 .config文件,该文件指导Makefile去把有用东西组织成内核
厂家配linux内核源码,比如说买了树莓派,树莓派linux内核源码
第一种方式:
cp 厂家.config .config
第二种方式:
make menuconfig 一项项配置,通常是基于厂家的config来配置
第三种方式:
完全自己来
如何配置树莓派的Linux内核
驱动两种加载方式:
* 编译进内核 zImage包含了驱动
M 模块方式生成驱动文件xxx.ko 系统启动后,通过命令inmosd xxx.ko 加载
2.2 内核配置
所有的操作几乎都是在源码目录下进行的:/home/yu/SYSTEM/linux-rpi-4.14.y
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make bcm2709_defconfig
指定ARM架构 指定编译器 树莓派 主要核心指令
这个就会生成一个 .config 内核配置文件(类似上面 2.1 第一种方式)
3. 树莓派linux内核编译
3.1 编译
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make -j4 zImage modules dtbs
j4 指定用多少电脑资源进行编译
zImage 生成内核镜像
modules 要生成驱动模块
dtbs 生成配置文件
3.2 编译成功后,看到内核源码树目录底下多了vmlinux, 失败则无此文件
成功后,目标 zImage 镜像 在arch/arm/boot 底下(可查看)
3.3 打包 zImage 成树莓派可用的 xxx.img
回到源码目录下打包:/home/yu/SYSTEM/linux-rpi-4.14.y
./scripts/mkknlimg arch/arm/boot/zImage ./kernel_new.img
3.4 数据拷贝
把树莓派的sd卡插入ubuntu系统电脑,树莓派的sd卡有两个分区:
一个fat分区,是boot相关的内容,kernel的img文件就放在这个分区里;
一个是ext4分区,也就是系统的根目录分区。
命令 dmesg 查看linux内核信息,即可查看U盘插入成功与否(出现 sdb:sdb1 sdb2)
mkdir data1 data2 创建两个将要挂载分区的文件夹
挂载U盘
sudo mount /dev/sdb1 data1 一个fat分区,是boot相关的内容,如kernel的img
sudo mount /dev/sdb2 data2 一个是ext4分区,也就是系统的根目录分区。
安装modules, 设备驱动文件: hdmi usb wifi io ...没有安装的话,内核能起来,但驱动不能用
sudo ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make INSTALL_MOD_PATH=/home/chenlc/data2 modules_install
安装更新 kernel.img 文件,注意sd卡中的镜像名字是kernel7.img
先备份(以免刷机失败,导致树莓派无法启动)
cd /home/chenlc/data1
cp kernel7.img kernel7OLD.img
再把编译新生成的拷贝到data1,起名kernel7.img
cp kernel_new.img /home/chenlc/data1/kernel7.img
查看拷贝的文件有没有坏掉(每个文件都有自己的md5编号)
md5sum kernel7.img
拷贝配置文件,为了能加载一些驱动等..(.*dtb* : *是通配符,以.开头,中间是dtb这种格式的文件,不管dtb前后是什么字符,都拷贝)
cp arch/arm/boot/dts/.*dtb* /home/chenlc/data1
cp arch/arm/boot/dts/overlays/.*dtb* /home/chenlc/data1/overlays/
cp arch/arm/boot/dts/overlays/README /home/chenlc/data1/overlays/
4. 测试树莓派是否正常启动
断开虚拟机的U盘
到window下找到U盘的cmdline.txt,修改成通过串口启动,看树莓派的启动过程,确保系统能正常
查看内核是否更换
uname -r (查看内核版本)