树莓派内核源码得获取,配置, 编译,裁剪

您所在的位置:网站首页 内核下载成功什么意思 树莓派内核源码得获取,配置, 编译,裁剪

树莓派内核源码得获取,配置, 编译,裁剪

2023-12-16 14:21| 来源: 网络整理| 查看: 265

本文介绍如何获取linux内核代码,并完成编译、配置,内核替换。 为什么要进行树莓派的源码配置呢?

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

1.树莓派源码的获取,交叉编译等工具

注意:

1、树莓派里安装的系统镜像版本要和kernel代码对应。因为树莓派系统是在不断开发和升级的,如果你的树莓派使用的是某个时间的系统镜像,那么最好也使用当时的kernel代码。这里我使用得内核版本是4.14.98-v7+,那么我下载的也是4.14版本的代码2、关于内核编译方法,官网有很详细的介绍:https://www.raspberrypi.org/documentation/linux/kernel/building.md,这里算是翻译和补充。3、以下编译过程在树莓派1和树莓派3B上测试ok。 2.编译交叉工具的获取

参考博文:https://blog.csdn.net/weixin_45309916/article/details/107518590

3.内核源码的获取

源码:https://github.com/raspberrypi/ 在这里插入图片描述 具体使用的版本取决于树莓派的版本," uname -r "可查看树莓派的版本,我这里是4.14的所以我下载的是4.14的 在这里插入图片描述

4.修改配置文件 配置config

第一种方式:(推荐使用)

1.厂家配linux内核源码,比如说买了树莓派,树莓派linux内核源码cp 厂家.config .config (树莓派1的工程是bcmrpi_defconfig,树莓派2、3的工程是bcm2709_defconfig) ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make bcm2709_defconfig 指定ARM架构 指定编译器 树莓派内核 主要核心指令 ARCH=arm:指定为RAM架构CROSS_COMPILE=arm-linux-gnueabihf- :指定编译器KERNEL=kernel7:指定内核版本 在这里插入图片描述 我已经配置过了所以不会有相关的信息打印

第二种方式:

. make menuconfig 一项项配置,通常是基于厂家的config来配置 (需要安装ncurse库,下面有介绍) ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make menuconfig #指定ARM架构 指定编译器 树莓派内核 主要核心指令 ARCH=arm:指定为RAM架构CROSS_COMPILE=arm-linux-gnueabihf- :指定编译器KERNEL=kernel7:指定内核版本 在这里插入图片描述上下左右键进行操作Enter进入下一个子菜单(末尾带箭头的会有子菜单)" M " 模块方式生成驱动文件xxx.ko 系统启动后,通过命令inmosd xxx.ko 加载" * " 编译进内核 zImage包含了驱动

第三种方式:

完全自己来 5.编译

安装必要的库:

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 开始编译 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make -j4 zImage modules dtbs ARCH=arm:指定为RAM架构CROSS_COMPILE=arm-linux-gnueabihf- :指定编译器KERNEL=kernel7:指定内核版本-j4:四核处理器来编译(可根据虚拟机的硬件来更改)zImage:生成内核镜像modules:生成的驱动模块dtbs:配置文件等等 我电脑是编译了10多分钟,看自己电脑的配置 查看是否编译成功:源码树目录下会生成" vmlinux " (没有压缩的Linux) 在这里插入图片描述真正的生成的Linux内核在源码树目录下 arch/arm/boot 下生成的 " zImage " 在这里插入图片描述成功后打包zImage成树莓派可用的xxx.img ./scripts/mkknlimg arch/arm/boot/zImage ./kernel_new.img 6.挂载树莓派sd卡,并安装编译出的DIRECTLY 到sd卡

输入命令 " dmesg "看看SD卡是否挂在成功

在这里插入图片描述 到此 ,表示挂在成功

把sdb1和sdb2挂到我们的Ubuntu这边来

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

1.创建两个文件夹 data1–>fat分区–>放置镜像文件 data2–>ext4分区–>放置根目录文件 在这里插入图片描述2.挂载sdb1和sdb2 到 data1 data2 sudo mount /dev/sdb1 data1 sudo mount /dev/sdb2 data2

此时data1和data2就有数据了(data1:(fat分区) 放置内核镜像 data2(ext4分区):存放存放根目录) 在这里插入图片描述

3、安装modules(设备驱动文件: hdmi usb wifi io …) modules安装在ext4分区也就是我们的data2分区 安装modules的路径是我们源码的路径 在这里插入图片描述 sudo ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make INSTALL_MOD_PATH=/home/qingmu/work/linux-rpi-4.14/data2 modules_install

INSTALL_MOD_PATH:这里用的绝对路径避免出错

操作ext4(data2)分区,需要root权限。

5、安装更新 kernel7.img

在这里插入图片描述

1.避免刷机失败我们把kernel7.img备份一下 在这里插入图片描述2.再把编译新生成的kernel_new.img(源码树目录下)拷贝到data1,起名kernel7.img(直接覆盖掉) cp kernel_new.img ../data1/kernel7.img 3.拷贝配置文件 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/

注意路径问题,这里是我的路径,要根据自己的路径来,不要出错

7.断开SD开的连接 把SD开的连接接到电脑上

1.修改codline.txt文件

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

** 2.修改config.tex文件** 在文件的末尾加上(如果有这句,就不需要加)

dtoverlay=pi3-miniuart-bt 8.用串口连接树莓派看是否成功 1.把SD卡插回树莓派2.开启串口启动树莓派 注意要带上串口的USB 在这里插入图片描述3.查看内核的版本是否和我们开始下载的一致 uname -r

在这里插入图片描述

和我们最开始的内核版本4.14.98-v7+ 不一致 ,和我们下载的内核版本一致,成功

希望可以帮助到小伙伴们



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3