## ***树莓派—— 内核开发——下载——替换***

由于自己只是使用交叉编译做的 所以该方法只适合使用交叉编译的小伙伴

  1. 需要准备一个linux交叉编译的主机 比如ubuntu 18
  2. 获取交叉编译工具链 由于自己是使用学习群下载下来的 所以只需要弄到共享文件夹下 在解压即可

交叉编译工具:git clone git@github.com:raspberrypi/tools

内核源码下载地址 https://github.com/raspberrypi/ 下载4.14.y版本
下面的文件夹都是我自己的命名的文件夹 不要直接完全复制指令

我们要对交叉编译工具进行环境配置
1 我们得先进入到工具的/bi文件夹下 获取它的路径 -
cd /home/CLC/lessonPI/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bi
然后echo $PATH 获取当前的环境变量
在pwd 获取路径

配置环境变量 有两种方式
直接在最开始的位置配置 不需要进入到交叉编译的文件目录下
1—临时有效
PATH 环境变量
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/CLC/lessonPI/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin
2 – 永久有效

修改工作目录下的.bashrc 隐藏文件,配置命令终端的
vi /home/CLC/.bashrc
在文件最后一行加
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/CLC/lessonPI/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin
source /home/CLC/.bashrc 加载配置文件,马上生效配置。
source .bashrc ———— 生效配置

检查下交叉编译工具对不对:
arm-linux-gnueabihf-gcc -v
我们要选择4.8.3的这个

配置config
树莓派2、3的工程是bcm2709_defconfig。
然后输入下面的指令进行内核配置
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make bcm2709_defconfig

编译

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

1、执行menuconfig
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make menuconfig
如果没什么改的就不用执行这一步。

2.编译
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make -j4 zImage modules dtbs
4 代表4核心 编译速度根据电脑的配置 应该是是在20分钟左右
如果编译成功 会看到看到源码树目录多了vmlinux,失败则无此文件
成功后,目标zImage镜像arch/arm/boot底下
这里推荐 tree
安装 sudo apt-get install tree
这个树很方便我们查看内核的文件目录
3 打包zlmage
直接用linux源码包里的工具:
./scripts/mkknlimg arch/arm/boot/zImage ./kernel_new.img
在本目录生成一个kernel_new.img文件,这个文件就是要放到sd卡中的文件。
注:网上很多地方说的用 tools/mkimage/imagetool-uncompressd.py 的方法不行!

5.3 打包zImage成树莓派可用的xxx.img
./scripts/mkknlimg arch/arm/boot/zImage ./kernel_new.img

树莓派挂载sd 卡

1 先把树莓派的sd 卡拔出 插到读卡器上
然后将他链接到ubuntun 下
然后输入dmesg 查看 U盘信息

sdb 1 是fat分区,是boot相关的内容,kernel的img文件就放在这个分区里sdb2是ext4分区,也就是系统的根目录分区

数据拷贝
mkdir data1 data2
挂载U盘
sudo mount /dev/sdb1 data1
sudo mount /dev/sdb2 data2
安装modules
输入 sudo ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make INSTALL_MOD_PATH=data2 modules_install
操作ext4分区,需要root权限。、
这个要进入内核的目录下操作
~/SYSTEM/linux-rpi-4.14.y$ system 是我自己建的文件夹
但是我自己在输入这条指令时 出现问题 然后我就换了另外一个方法
sudo env PATH=$PATH make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_MOD_PATH=data2 modules_install
这个是在编程那些年公众号看到的

然后安装更新 kernel.img 文件,注意镜像名字是kernel7.img
先备份
cd /home/chenlc/data1
cp kernel7.img kernel7OLD.im

再把编译新生成的拷贝到data1,起名kernel7.img
cp kernel_new.img /home/chenlc/data1/kernel7.im
拷贝配置文件
cp arch/arm/boot/dts/.dtb /home/chenlc/data1
cp arch/arm/boot/dts/overlays/.dtb* /home/chencl/data1/overlays/
cp arch/arm/boot/dts/overlays/READMEhome/chenclddata1//overlays/
然后修改sd 卡的cmdline.txt 把他还原 如果是没有使用过语音模块 这步就不需要

直接把sd 插回树莓派上 先用串口登录 然后查看内核版本
uname -a
在ifconfig 查看网络有没有
如果有 那就更换内核成功

https://blog.csdn.net/nicekwell/article/details/78482833 这作者还提供了在树莓派上操作的办法 使用树莓派编译内核的效率没有使用交叉编译工具高 个人不是很推荐 感兴趣的可以去试试

-------这只是自己个人的学习的总结 有不对的欢迎指出来

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值