树莓派Linux源码配置,内核编译以及内核更换

目录

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

1.1 了解linux内核源码:

1.2 了解源码目录树的结构

2、树莓派Linux的源码配置

2.1 内核源码下载说明

2.2 三种方法配置源码

        2.2.1 方式一

        2.2.2 方式二:

        2.2.3 方式三

3、Linux内核编译:

4、Linux内核镜像拷贝至树莓派并启动新内核:

4.1 操作步骤说明:

4.1.1 打包zImage文件。打包zImage成树莓派可用的xxx.img

4.1.2 镜像的拷贝

4.1.3 安装modules,含有设备驱动文件:比如HDMI,WIFI,USB,IO等

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

4.4.5  把打包的kernel_new.img文件,拷贝到data1分区

4.4.6 拷贝其他相关文件

4.4.7 虚拟机弹出USB,让USB被主机识别

4.4.8 SD卡插入树莓派,用串口登陆,就能看见操作系统运行起来


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

sudo apt-get install tree //下载tree工具
tree   //查看目录树

1.1 了解linux内核源码:

大约1.3w个C文件:1100w行代码
Linux是开源,免费,Linux开源社区工作者共同维护
Linux是一个开源的,支持多架构多平台代码,可移植性非常高

但是Linux内核编译出来一般就几M ----4M

因为支持多平台多架构,所以编译之前要配置,配置成适合的目标平台来用
平台:ARM(海思,友善之臂,树莓派,nanopi) X86 MIPS

参考博文: https://www.cnblogs.com/senior-engineer/p/4929703.html

1.2 了解源码目录树的结构

配置Linux内核适合树莓派相关操作:

我们工作的时候,需要进行驱动代码编写,紧接着对驱动代码进行编译,但驱动代码的编译需要一个提前编译好的内核,编译内核就必须配置。

配置的最终目标会生成 .config文件,该文件指导Makefile去吧有用的东西组织成内核。

厂家配Linux内核源码:比如说买了树莓派,厂家会给你树莓派Linux内核源码
拿到源码之后,里面包含了厂家的源码

2、树莓派Linux的源码配置

配置说明驱动代码的编译需要一个提前编译好的内核,所以需要先编译内核,而编译内核又必须提前完成相关的源码配置;

配置目标最终生成 .config文件,该文件是指导Makefile去把有用东西的组织成内核。

2.1 内核源码下载说明

● 查看树莓派原内核版本号: uname -r

● 树莓派Linux源码下载网址:Raspberry Pi · GitHub

 树莓派Linux源码配置,内核编译以及内核更换_第1张图片

树莓派Linux源码配置,内核编译以及内核更换_第2张图片  树莓派Linux源码配置,内核编译以及内核更换_第3张图片

(1)将下载好的工具链文件放入Windows中与Ubuntu的共享文件夹中;

(2)打开Ubuntu,从共享文件夹拷贝到工作目录。输入命令:

cp /mnt/hgfs/sharetoubantu/linux-rpi-4.14.y.zip .//我的共享文件名是sharetoubantu

(3) 解压文件: unzip linux-rpi-4.14.y.zip

2.2 三种方法配置源码

2.2.1 第一种方式

我们买的开发板厂家一般会自配linux内核的源码,比如买了树莓派,树莓派一般自带linux内核源码。直接使用厂家的.config文件进行配置。

cp 厂家.config .config
find . -name *_defconfig //进入源码文件搜索 指令
找到:
./arch/arm/configs/bcm2709_defconfig

树莓派Linux源码配置,内核编译以及内核更换_第4张图片

linux源码中有很多工程:
树莓派1的工程是bcmrpi_defconfig;
树莓派2、3的工程是bcm2709_defconfig。 

下面命令是将工程bcm2709_defconfig配置到 .config里 

ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make bcm2709_defconfig
ARCH=arm 指明当前要编译arm,虽然树莓派是64位的,这里仍然选择arm,而不是arm64。
CROSS_COMPILE 指明交叉工具链名称。
KERNEL 指明kernel类型,树莓派1设置为kernel,树莓派2、3设置为kernel7。

树莓派Linux源码配置,内核编译以及内核更换_第5张图片

 实现把厂家.config 变成 ,config

2.2.2 方式二:

添加某个驱动进去,make menuconfig 一项项配置,通常是基于厂家的config来配置
安装必要的库:

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

树莓派Linux源码配置,内核编译以及内核更换_第6张图片

 *   编译进内核  zImage包含了驱动

M  模块方式生成驱动文件xxx.ko  系统启动后,通过命令inmosd xxx.ko 加载 

2.2.3 方式三

厂家本家:完全自己来

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源码配置,内核编译以及内核更换_第7张图片

编译完成后,可以看到源码树目录多了vmlinux这个文件,如果编译失败则没有此文件,成功后,目标zImage镜像在arch/arm/boot目录下(此步ARM架构的芯片都是类似)(vmlinux是未压缩的liunx,zImage是压缩好的liunx)。

cd arch/arm/boot
ls

4、Linux内核镜像拷贝至树莓派并启动新内核:

4.1 操作步骤说明:

4.1.1 打包zImage文件。打包zImage成树莓派可用的xxx.img

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

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

树莓派Linux源码配置,内核编译以及内核更换_第8张图片

4.1.2 镜像的拷贝:

把树莓派断电,拔出SD卡,使用读卡器插入电脑连接至虚拟机。

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

树莓派Linux源码配置,内核编译以及内核更换_第9张图片 

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:根目录数据

树莓派Linux源码配置,内核编译以及内核更换_第10张图片

4.1.3 安装modules。含有设备驱动文件:比如HDMI,WIFI,USB,IO等

在ext4分区操作,这里的data2分是ext4分区,需要root权限。

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

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

备份kernel7.img,防止存在错误操作:

● cd /home/dhw/data1
● cp kernel7.img kernel7OLD.img

4.4.5  把打包的kernel_new.img文件,拷贝到data1分区,起名kernel7.img,覆盖原来的kernel7.img

cp kernel_new.img /home/wj/data1/kernel7.img

4.4.6 拷贝其他相关文件

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

4.4.7 虚拟机弹出USB,让USB被主机识别

4.4.8 SD卡插入树莓派,用串口登陆,就能看见操作系统运行起来

查看内核版本:uname -r

树莓派Linux更换内核前的版本号:

 树莓派Linux更换内核后的版本号: 

 完成换源 !

参考博文:https://blog.csdn.net/m0_74985965/article/details/129781307?spm=1001.2014.3001.5502#%E4%B8%80%C2%A0%20%C2%A0%E6%A0%91%E8%8E%93%E6%B4%BELinux%E7%9A%84%E6%BA%90%E7%A0%81%E9%85%8D%E7%BD%AE

你可能感兴趣的:(树莓派,Linux入门,linux,ubuntu,运维)