树莓派源码内核配置(二)
再多嘴一句:树莓派LINUX源码配置,是为了驱动代码的编写,驱动代码编译需要一个提前编译好的内核,编译内核就必须配置,配置的最终目标是形成.config文件,该文件知道makefile去把有用的东西组织成 内核。
getconf LONG_BIT命令查看是几位的操作系统
64位系统参考此链接:https://mp.weixin.qq.com/s/05Hr5Z9hyTkAVekDvG6yeQ
接上节:
inux源码中有很多工程:
树莓派1的工程是bcmrpi_defconfig;
树莓派2、3的工程是bcm2709_defconfig。
树莓派4是 bcm2711_defconfig 且内核是kernel7l
我们可以在传过去的Linux解压出来的工程文件夹下执行:find . -name *._defconfig .找到这些工程
以下环节都在解压出来的文件价下执行
1.执行内核配置命令:ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make bcm2709_defconfig
如果是pi4运行如下命令:
KERNEL=kernel7l
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcm2711_defconfig
或者 make KERNEL=kernel7l ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcm2711_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
有的还需要:
flex和bison库
如图:
之后继续执行以上命令。
2。接下来编译:ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make -j4 zImage modules dtbs 一般编译过程需要20分钟左右。如果提前结束报错。
(如果是pi4就是kernel7l)
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7l make -j4 zImage modules dtbs
可能早安装以下依赖库:
sudo apt install openssl
sudo apt install libssl-dev
再编译即可正常编译,判断编译有没有成功,就在此文件夹下看有没有生成vmlinux这个文件
3.然后再进到这个文件夹下,这个zInamge就是我们想要的东西
接下来打包(亲测pi4 5.10系统版本ubuntu18-04跳过此打包步骤),将zImage打包成树莓派可用的xxx.img:
在Linux-rpi。。。文件夹下运行./scripts/mkknlimg arch/arm/boot/zImage ./kernel_new.img 使用源码包自带的工具打包,这个我们kernel_new.img我们等下就要放到树莓派sd卡中
这里我们5.10版本太高会提示找不到mkknlimg。是因为这个打包工具淘汰了。我的解决办法是去github在这4.几版本的linux源码,解压在scripts文件夹下找到这个工具拷贝过去。再运行
4.镜像拷贝:
插入sd卡到电脑,连接都虚拟机,可用dmesg命令查看连接情况
挂载树莓派SD卡,桌面目录下(方便),mkdir data1 data2。
挂载U盘: sudo mount /dev/sdb1 data1 一个是fat分区,是boot相关的内容,kernel的img
sudo mount /dev/sdb2 data2 一个是ext4分区,也就是系统的根目录
安装modules,设备驱动文件(这条指令要在Linux解压出来的文件夹下运行):sudo ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7(同理如果是pi4这里是kernel7l) make INSTALL_MOD_PATH=[ext4] modules_install 这个wxit对应data2根目录绝对路径
pi4:
sudo ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7l make INSTALL_MOD_PATH=/home/ht/data2 modules_install
备份:卡里原本的镜像文件:
cd /home/chenlc/data1
cp kernel7.img kernel7OLD.img
再把编译生成的拷贝到data1,起名kernel7l.imgcp kernel_new.img /home...../kernel7l.img 或者编辑 [fat]/config.txt 文件,在最后加入一行:kernel=kernel_new.img(pi4亲测可行)
5、复制其他相关文件 注意fat分区对应我们自己的data1分区绝对路径
cp arch/arm/boot/dts/.*dtb* [fat]/
cp arch/arm/boot/dts/overlays/.*dtb* [fat]/overlays/
cp arch/arm/boot/dts/overlays/README [fat]/overlays/
更新完成后插回树莓派即可开机,开机后可以用 uname -a 命令查看kernel信息已经改变。