天天看点

9. 树莓派linux内核源码的 - 配置 与 编译1. 安装适合的编译器。2. 树莓派linux源码配置3. 树莓派linux内核编译4. 测试树莓派是否正常启动

目录

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  (查看内核版本)