树莓派编译修改内核

一、前言

树莓派使用的镜像比较旧了,可以通过三种方式进行升级。一种是本地下载编译升级,即Local build,还有一种采用交叉编译,第三种最简单,输入一条命令就可以升级。
下面主要讲第一种方式。

二、升级过程

  • 1、目前的内核版本,使用 uname -a 查看
    这里写图片描述
  • 2、使用  sudo apt-get install git bc 安装必备软件
  • 3、使用 git clone –depth=1 https://github.com/raspberrypi/linux下载最新内核
  • 4、使用如下命令进行编译前配置
    cd linux
    KERNEL=kernel7
    make bcm2709_defconfig
    make menuconfig

这里写图片描述

  • 5、make,共有三个东西需要make,这个过程会花费很少时间,同时为了避免出错,可以分别make.
    make -j4 zImage
    make -j4 modules
    make -j4 dtbs

这里写图片描述
– 6、执行 sudo make modules_install 进行安装
– 7、依次使用如下命令拷贝

sudo cp arch/arm/boot/dts/*.dtb /boot/
sudo cp arch/arm/boot/dts/overlays/*.dtb* /boot/overlays/
sudo cp arch/arm/boot/dts/overlays/README /boot/overlays/
sudo cp arch/arm/boot/zImage /boot/$KERNEL.img

这里写图片描述

  • 8、执行完上述步骤,不出错的话,重启后,内核应该就升级成功了。

三、升级情况

make的过程非常旧,如果不加参数 -j4 的话,编译需要好几个小时,加上参数使用 4核同时编译,编译速度明显加快。时间如下:

make -j4 zImage      34min
make -j4 modules     66min 
make -j4 dtbs        <1min

 

除去两个编译过程特别耗时外,其他的指令都很快完成。

四、错误及解决方法

可能出现的错误

如上执行完了所有步骤,并没有那一步出现错误。执行完步骤后查看版本号是没有变化的,重启后就无法网卡灯不闪烁,路由器看不到树莓派连接,SSH自然登陆不上。没有显示器,因此看不出系统是否启动,感觉应该是没有。

目前不知道是什么原因导致的。升级完成后,/boot目录下多了几个.dts文件,删除后试了不行。最新版的树莓派官方系统默认不开启SSH,需要在/boot目录下手动添加一个名为ssh的空白文件,添加了也不行。

拷贝升级前的/boot文件夹内容进行替换后,可以连上树莓派,查看版本号并没有更新。

解决方法

出现上面这个情况的原因是树莓派无法boot,bootbin和升级后的内核并不兼容,也就是说原有的旧的bootbin不能boot新的内核。

可以使用新版本的固件文件替换。代码在树莓派github仓库的firmware项目下。具体的替换有三个,如下:

bootcode.bin
fixup.dat
start.elf

将新版本的这三个文件拷贝到/boot目录下替换掉原有的文件,便可以启动了。

打赏
Bookmark the permalink.
0 0 投票数
文章评分
订阅评论
提醒
guest

0 评论
内联反馈
查看所有评论