linux源码编译阿帕奇-树莓派进阶课程3:Linux内核源码目录树素养解析

Linux内核源码目录树读写分析

1、Linux内核源码目录树读写分析:

sudo apt-get install tree
tree   //查看目录树

大约1.3w个C文件:1100w行代码

Linux开源、免费,由Linux开源社区工作者共同维护

Linux是开源的,支持多架构、多平台代码,具有特别高的可移植性

但Linux内核通常编译成几M----4M

因为它支持多平台、多架构,所以在编译之前必须进行配置,配置为合适的目标平台来使用。

平台:ARM(海思、友善之臂、Raspberry Pi、nanopi)X86 MIPS

参考文章:

Linux内核源代码目录树形结构

了解源码目录树的结构

2、配置适合Raspberry Pi相关操作的Linux内核:

我们工作的时候,需要编译驱动代码linux源码编译阿帕奇,然后编译驱动代码,但是驱动代码的编译需要预编译内核,而编译好的内核必须要配置。

配置的最终目标是生成 .config 文件,该文件指示 Makefile 将有用的内容组织到内核中。

制造商分发Linux内核源代码:例如,如果您购买Raspberry Pi,制造商将给您Raspberry Pi Linux内核源代码

拿到源码后linux源码编译阿帕奇,里面包含了厂家的源码

第一种形式:

cp 厂家.config .config
find . -name *_defconfig
找到:
./arch/arm/configs/bcm2709_defconfig

第二种形式:

make menuconfig   //一项项配置,通常基于厂家的config来配置

第三种形式:

厂家自家:全部自己做

如何配置Linux树莓派的内核?

方法一:

ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make bcm2709_defconfig
//用来配置,指定编译器

该命令的作用是将bcm2709_defconfig的配置获取到.config中。

我们可以直接使用项目中的配置,但这样的话,树莓派原有的配置可能会丢失。 这是获取当前使用的树莓派配置的方法。

实现将manufacturer.config改为,config

方法二:

添加驱动程序

linux源码编译阿帕奇-树莓派进阶课程3: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

安装后:

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

驱动两种加载形式:

*:编译进内核-----zImage包含驱动程序。

M:驱动文件xxx.ko以模块的形式生成。 系统启动后,传递命令

inmosd xxx.ko 已加载

**方法三:**暂时忽略

3.Linux内核编译:

编译:

ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make -j4 zImage modules dtbs 2>&1 | tee build.log
//arm架构,内核7,j4:指定用多少电脑资源编译,
//zImage:生成内核镜像
//modules:生成驱动模块
//dtbs:生成配置文件

用n个进程进行编译。 如果不指定进程数,默认会在单个进程中编译。

linux源码编译阿帕奇-树莓派进阶课程3:Linux内核源码目录树素养解析

内核编译成功后可以看到源码树多了vmlinux,如果失败则没有这个文件。

成功后zImage就是我们需要的目标图片

cd arch/arm
cd boot
ls

3. 将 Linux 内核镜像复制到 Raspberry Pi 并启动新内核:

打包 zImage 文件:

直接使用linux源码包中的工具:

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

在此目录下生成kernel_new.img文件,该文件就是要放到sd卡中的文件。

注意:网上很多地方都说使用tools/mkimage/imagetool-uncompressd.py的方式不行! !

镜像副本:

1. 关闭树莓派电源,拔出SD卡,使用U盘插入笔记本连接虚拟机。

dmesg    //显示可移动设备信息

linux源码编译阿帕奇-树莓派进阶课程3:Linux内核源码目录树素养解析

cd  //回到根目录
mkdir data1
mkdir data2
//数据拷贝;创建两个文件夹,挂载U盘
sudo mount /dev/sdb1 data1//一个fat分区,是boot相关的内容,kernel的img文件就放在这个分区里;
sudo mount /dev/sdb2 data2//一个是ext4分区,也就是系统的根目录分区
//  sudo umount /dev/sdb1   //取消挂载
//data1:U盘数据   data2:根目录数据

数据2:

安装模块:

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

安装设备驱动文件:hdmi接口 usb WiFi io等;

更新 kernel.img 文件:

注:镜像名称:kernel7.img

cd data1
ls
//可以看到kernel7.img 文件
cp  kernel7.img  kernel7OLD.img//做一个备份

然后将新生成的副本复制到data1中并命名为:kernel7.img

cp kernel_new.img  /home/dazai/data1/kernel7.img
md5sum kernel_new.img//检查cp是否成功
md5sum /home/dazai/data1/kernel7.img

复制成功。

复制其他相关文件:

cp arch/arm/boot/dts/.*dtb* /home/dazai/data1/
cp arch/arm/boot/dts/overlays/.*dtb* /home/dazai/data1/overlays/
cp arch/arm/boot/dts/overlays/README /home/dazai/data1/overlays/

之后,Ubuntu 会切断对 SD 卡的处理,并将其发送给 Windows 进行捕获。

减少:

之后:将 SD 卡插回 Raspberry Pi

通过并口登录观看启动过程,

树莓派终端输入:

 uname -r

内核版本已更改。

树莓派内核配置、编译、移植成功。

这些行动始于:

驱动代码的编译需要预编译内核。

参考文章:

树莓派-内核开发-说明书下载代码编译和替换内核

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 源码编译 linux源码编译阿帕奇-树莓派进阶课程3:Linux内核源码目录树素养解析 https://www.wkzy.net/game/171944.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务