一、准备工作
下载linux内核源码树。
下载好之后传送到ubuntu里面。
下载安装交叉编译工具链。
二、内核配置
内核配置有三种方式。
第一种:基于厂家提供的linux内核源码(.config文件)进行配置。
第二种:make menuconfig 根据厂家提供的一项一项的配置。
第三种:自己搞。
三、如何配置树莓派linux的内核。
树莓派2,3的工程是bcm2709_defconfig.
第一种方式。
(1)先搜索一下所有的config文件,看有没有bcm2709_defconfig这个文件
find -name *_defconfig
在里面找到这个bcm2709_defconfig的文件。
(2)获取bcm2709_defconfig的配置到.config
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make bcm2709_defconfig
指定ARM架构 指定编译器 树莓派 主要核心指令
第二种方式。
(1) 配置之前需要安装一些库,索性一致性把编译需要用的库也安装掉。
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
(2) 配置命令:
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make menuconfig
执行结果如下:
四、编译linux内核
(1)编译命令如下,内核编译的时间比较长,我编译了大概20多分钟
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make -j4 zImage modules dtbs
j4指定用多少电脑资源进行编译 (j4表示4核)zImage表示生成内核镜像 modules要生成驱动模块 dtbs生成配置文件
如何知道自己编译成功还是失败?
(1)首先确定它没有报错,其次源码树目录上面生成vmlinux,反之失败。
(2) vmlinux就是没有压缩的linux,它真正的linux内核应该生成在 arch/arm/boot 下面。
五、打包zImage成为树莓派可用的镜像文件。
(1)使用linux内核源码里的工具,把zImage打包成kernel_new.img。
./scripts/mkknlimg arch/arm/boot/zImage ./kernel_new.img
(2)连接U盘到虚拟机,使用demsg命令查看SD卡。
六、挂载U盘到ubuntu。
树莓派的SD卡有两个分区:
一个fat分区。是boot相关的内容,kernel的img文件在此分区。
一个是ext4分区,也就是系统的根目录分区。
(1) 先创建两个文件夹,data1对应fat分区,data2对应ext4分区。
mkdir data1
mkdir data2
(2)使用 mount 命令将分区挂载到对应的文件夹,fat分区挂载到了data1,ext4分区挂载到了data2。
sudo mount /dev/sdc1 data1
sudo mount /dev/sdc2 data2
(3)安装modules,设备驱动文件到 ext4 分区,对应的就是data2分区,绝对路径根据自己的修改。
sudo ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make INSTALL_MOD_PATH=/home/secret/data2 modules_install
(4)安装更新kernel.img,!注意镜像名字是kernel7.img,更新前最好备份一份,再把 把编译生成的kernel_new.img拷贝到data1分区里面,拷贝完成后 可使用 md5sum 命令来对比一下编码值,确保拷贝过程中没有损坏。----注意此命令在内核源码树下面来执行。
cp kernel_new.img /home/chenlc/data1/kernel7.img
(5)拷贝其他配置文件
cp arch/arm/boot/dts/.*dtb* /home/cai/data1
cp arch/arm/boot/dts/overlays/.*dtb* /home/cai/data1/overlays/
cp arch/arm/boot/dts/overlays/README /home/cai/data1/overlays/
七、替换内核完成。
到了这一步你就可以把SD卡插到树莓派上面启动了,不过为了方便观看启动过程可以配置串口登录。修改cmdline.txt文件,配置成如下,就可以了。
dwc_otg.lpm_enable=0 console=tty1 console=serial0,115200 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
当你停下来休息时, 别人却还在拼命奔跑。