再多嘴一句:树莓派LINUX源码配置,是为了驱动代码的编写,驱动代码编译需要一个提前编译好的内核,编译内核就必须配置,配置的最终目标是形成.config文件,该文件知道makefile去把有用的东西组织成 内核。
接上节:
inux源码中有很多工程:
树莓派1的工程是bcmrpi_defconfig;
树莓派2、3的工程是bcm2709_defconfig。
我们可以在传过去的Linux解压出来的工程文件夹下执行:find . -name *._defconfig .找到这些工程
以下环节都在解压出来的文件价下执行
1.执行内核配置命令: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
有的还需要:
flex和bison库
如图:
之后继续执行以上命令。
2。接下来编译:ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make -j4 zImage modules dtbs 一般编译过程需要20分钟左右。如果提前结束报错。
可能早安装以下依赖库:
sudo apt install openssl
sudo apt install libssl-dev
再编译即可正常编译,判断编译有没有成功,就在此文件夹下看有没有生成vmlinux这个文件
3.然后再进到这个文件夹下,这个zInamge就是我们想要的东西
接下来打包,将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,设备驱动文件:sudo ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make INSTALL_MOD_PATH=[ext4] modules_install 这个wxit对应data2根目录绝对路径
备份:卡里原本的镜像文件:
cd /home/chenlc/data1
cp kernel7.img kernel7OLD.img
再把编译生成的拷贝到data1,起名kernel7.imgcp kernel_new.img /home...../kernel7.img 或者编辑 [fat]/config.txt 文件,在最后加入一行:kernel=kernel_new.img
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信息已经改变。
标签:kernel,树莓,img,sudo,源码,内核,install,arm From: https://www.cnblogs.com/hetaoBlog/p/17152124.html