树莓派之内核升级—源码编译

升级前系统版本
root@raspberrypi:~# uname -a
Linux raspberrypi 4.14.79-v7+ #1159 SMP Sun Nov 4 17:50:20 GMT 2018 arm71 GNU/Linux

1、下载内核源码
官网地址:https://github.com/raspberrypi

Linux内 核 源码:linux-rpi-4.14.y.zip
tools交叉编译器:编译内核和其他源码所需的工具

2、配置交叉编译环境
设置环境变量,下载的tools解压到当前系统根目录下。
32位系统将如下路径加入环境变量:
         /tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian
         /tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin
64位系统将如下路径加入环境变量:
         /tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64
         /tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin
例如:
root@raspberrypi:~# vi /etc/profile
加入环境变量:export PATH=$PATH:/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian:/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin

刷新环境变量使其生效:
root@raspberrypi:~# source /etc/profile

3、编译、提取内核及其模块
root@raspberrypi:/home # unzip linux-rpi-4.4.y.zip

root@raspberrypi:/home # cd linux-rpi-4.4.y

可以直接修改内核根目录下的Makefile文件,修改下面的两行:
 ARCH ?= $(SUBARCH)
 CROSS_COMPILE ?= $(CONFIG_CROSS_COMPILE:"%"=%)
或者直接使用make指令设置这两个参数,make ARCH=arm CROSS_COMPILE=arm-linux-......

执行find ./ -name "*bcm*defconfig*"查找对应的默认配置,只保留arm下的结果
root@raspberrypi:/home/linux-rpi-4.14.y # find ./ -name "*bcm*defconfig*"
./arch/arm/configs/bcm2835_defconfig
./arch/arm/configs/bcmrpi_defconfig
./arch/arm/configs/bcm2709_defconfig
./arch/arm/configs/bcm_defconfig

Pi 1使用bcmrpi_defconfig
Pi 2/3使用bcm2709_defconfig

4、内核编译
root@raspberrypi:/home/linux-rpi-4.4.y # KERNEL=kernel7
root@raspberrypi:/home/linux-rpi-4.4.y # make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcm2709_defconfig

配置内核模块,窗口顶部显示arm,说明参数设置成功
root@raspberrypi:/home/linux-rpi-4.4.y # make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig

编译内核镜像,如果是多处理器系统可以添加选项参数-jn, n为数字,表示多处理器的数量*1.5。可以加快编译速度
root@raspberrypi:/home/linux-rpi-4.4.y # make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage modules dtbs

root@raspberrypi:/home/linux-rpi-4.4.y # make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j4 zImage modules dtbs

5、升级内核及文件系统
将树莓派的SD卡插在Linux系统电脑上,查看分区
root@raspberrypi:/home/linux-rpi-4.4.y # lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 1 29.7G 0 disk
|__sda1 8:1 1 43.9M 0 part /media/root/boot
|__sda2 8:2 1 29.7G 0 part /media/root/rootfs
mmcblk0 179:0 0 14.4G 0 disk
|__mmcblk0p1 179:1 0 43.9M 0 part /boot
|__mmcblk0p2 179:2 0 14.1G 0 part /

sda1是FAT(boot)分区
sda2是ext4文件系统(root)分区

挂在SD卡分区
root@raspberrypi:/home/linux-rpi-4.4.y # mkdir /mnt/fat32
root@raspberrypi:/home/linux-rpi-4.4.y # mkdir /mnt/ext4
root@raspberrypi:/home/linux-rpi-4.4.y # sudo mount /dev/sda1 /mnt/fat32
root@raspberrypi:/home/linux-rpi-4.4.y # sudo mount /dev/sda2 /mnt/ext4

安装modules
root@raspberrypi:/home/linux-rpi-4.4.y # sudo make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_MOD_PATH=/mnt/ext4 modules_install
如果把INSTALL_MOD_PATH设置为本地目录可以提取出对应的modules,最后把kernel and Device Tree blobs复制到SD卡:

备份原先的img文件
root@raspberrypi:/home/linux-rpi-4.4.y # sudo cp /mnt/fat32/$KERNEL.img /mnt/fat32/$KERNEL-backup.img

将zImage格式转换成树莓派需要的img格式,并复制到SD卡
root@raspberrypi:/home/linux-rpi-4.4.y # sudo scripts/mkknling arch/arm/boot/zImage /mnt/fat32/$KERNEL.img
root@raspberrypi:/home/linux-rpi-4.4.y # sudo cp arch/arm/boot/dts/*.dtb /mnt/fat32/
root@raspberrypi:/home/linux-rpi-4.4.y # sudo cp arch/arm/boot/dts/overlays/*.dtb* /mnt/fat32/overlays/
root@raspberrypi:/home/linux-rpi-4.4.y # sudo cp arch/arm/boot/dts/overlays/README /mnt/fat32/overlays/

卸载SD卡分区
root@raspberrypi:/home/linux-rpi-4.4.y # sudo umount /mnt/fat32
root@raspberrypi:/home/linux-rpi-4.4.y # sudo umount /mnt/ext4

*** 升级内核的另一个方法是将img文件复制到相同目录下,使用不同的文件名,如kernel-myconfig.img,然后修改boot目录下的config.txt文件,
 加入:kernel=kernel-myconfig.img,最后将SD卡插入树莓派启动系统。
 
升级后的系统版本
root@raspberrypi:~# uname -a
Linux raspberrypi 4.14.89-v7+ #1159 SMP Sun Nov 4 17:50:20 GMT 2018 arm71 GNU/Linux

没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试