当前位置:   article > 正文

树莓派Linux源码配置 内核开发 编译 替换内核_内核编译驱动更换

内核编译驱动更换

1. 树莓派Linux源码配置介绍

         原文链接:树莓派-内核开发-说明 下载代码 编译 替换内核 - 生命不息 折腾不止

        驱动代码的编写
        驱动代码的编译需要一个提前编译好的内核
        编译内核就必须配置
        配置的最终目标会生成 .config文件,该文件指导Makefile去把有用东西组织成内


        厂家配linux内核源码,比如说买了树莓派,树莓派linux内核源码
             第一种方式:
                cp 厂家.config  .config
            第二种方式:
                make menuconfig 一项项配置,通常是基于厂家的config来配置
            第三种方式:
                完全自己来


        如何配置树莓派的Linux内核

        驱动两种加载方式:
                1)编译进内核  zImage包含了驱动
                2)把驱动编译成模块,然后使用命令把驱动加载到内核里面,就是M 模块方式生成驱动文件xxx.ko  系统启动后,通过命令inmosd xxx.ko 加载

二、下载仓库

对于我们要用到的有两个仓库:

https://github.com/raspberrypi/linux 内核源码

GitHub - raspberrypi/tools 交叉编译工具链(仅在交叉编译时用到)

注:
1、树莓派里安装的系统镜像版本要和kernel代码对应。因为树莓派系统是在不断开发和升级的,如果你的树莓派使用的是某个时间的系统镜像,那么最好也使用当时的kernel代码。
2、关于内核编译方法,官网有很详细的介绍:Raspberry Pi Documentation - The Linux kernel

三、交叉环境的配置(上一篇已经做完了)

四、配置config

树莓派1的工程是bcmrpi_defconfig
树莓派2、3的工程是bcm2709_defconfig     (我这里是用树莓派3)

4.1 使用源码里自带的config(进入前面解压好的linux-rpi-4.14.y目录下)

内核配置:此命令功能是获取bcm2709_defconfig的配置到 .config里
            ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make bcm2709_defconfig
            指定ARM架构   指定编译器                      树莓派           主要核心指令

五、树莓派Linux内核编译

安装必要的库:
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 执行menuconfig

ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make menuconfig

如果没什么改的就不用执行这一步

5.2 编译

ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make -j4 zImage modules dtbs

-j4代表四核,即四线程,看资源配置也可以改为8

zImage (内核镜像)、modules(驱动模块)、dtbs(配置文件)就是我们要生成的

这里大概要编译一段比较长的时间,如果编译一下就出错,可以看看前面步骤哪里错了,编译成功后,看到源码树目录多了vmlinux,失败则无此文件
成功后,目标zImage镜像在arch/arm/boot里面

5.3 打包zImage成树莓派可用的xxx.img

./scripts/mkknlimg arch/arm/boot/zImage  ./kernel_new.img

在本目录生成一个kernel_new.img文件,这个文件就是要放到树莓派用的sd卡中的文件

六、挂载树莓派sd卡

在挂载树莓派之前可以启动树莓派  uname -r  命令查看当前内核版本,之后替换内核版本了可以看到替换后的版本

把树莓派的sd卡插入ubuntu系统电脑,树莓派的sd卡有两个分区:
一个fat分区,是boot相关的内容,kernel的img文件就放在这个分区里;
一个是ext4分区,也就是系统的根目录分区。

6.1 数据拷贝

在工作目录下创建data1和data2两个目录用于挂载U盘        mkdir  data1 data2

注意:下面很多操作要加sudo需要超级用户权限

sudo mount /dev/sdb1 data1   一个fat分区,是boot相关的内容,kernel的img
sudo mount /dev/sdb2 data2   一个是ext4分区,也就是系统的根目录分区

6.2 安装modules

sudo ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make INSTALL_MOD_PATH=/home/jdr/data2 modules_install

6.3 更新 kernel.img 文件

安装更新 kernel.img 文件,注意镜像名字是kernel7.img

先备份
                    cd /home/jdr/data1
                    cp kernel7.img kernel7OLD.img

(直接覆盖)再把编译新生成的拷贝到data1,起名kernel7.img
                    cp kernel_new.img  /home/jdr/data1/kernel7.img

                    这里可以检查下cp拷贝是否完整:md5sum  会生成每个文件的唯一编码号,就是md5的值,拷贝失败会发生变化

                           源码树目录下           md5sum  kernel_new.img

                          /home/jdr/data1下     md5sum  kernel7.img

(指定内核)除了直接覆盖这里还有一种方法是指定内核:
                    编辑fat分区 /home/jdr/data1/config.txt 文件,在最后加入一行:
                    kernel=kernel_new.img

6.4 复制其他相关文件

拷贝配置文件: *是通配符
                cp arch/arm/boot/dts/.*dtb*   /home/jdr/data1
                cp arch/arm/boot/dts/overlays/.*dtb*  /home/jdr/data1/overlays/
                cp arch/arm/boot/dts/overlays/README   /home/jdr/data1/overlays/

拷贝完毕即可断开U盘了

在cmdline.txt里,下面黑色标粗的  console=serial0,115200  加上去,之前可能因为树莓派串口编程删掉了,这个是因为我们要观察操作系统是否起得来,要查看启动过程就只有串口连接,ssh看不到启动过程的

dwc_otg.lpm_enable=0 console=tty1 console=serial0,115200 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait

6.5启动树莓派

uname -r 查看树莓派内核,看看是否更换了

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/246829?site
推荐阅读
相关标签
  

闽ICP备14008679号