树莓派3B内核移植

作者:杨文

在树莓派的系统中,提供了很多的现成的驱动程序和资源,尽管这样,还是远远不能适用于大部分情况下的设计使用,所以在使用某些设备时,需要自行编写或者修改一些驱动,以适用于想要控制的设备。编写linux驱动,需要内核源码树,所以编写驱动的第一步就是移植内核,以获得内核源码树。


1.准备工作:

1.1开发环境系统ubuntu 16(64位),在PC上安装虚拟机。

1.2树莓派系统为 ubuntu 16.04,(官方的系统为Raspbian,不过树莓派支持很多系统,这里用ubuntu因为UI看着更爽),树莓派官网下载。

1.3下载源码:https://github.com/raspberrypi

Linux:树莓派内核源码

tools:树莓派的交叉编译工具

注意:要下载系统对应的源码,我现在系统是4.4.38,所以下载4.4.y。

下载方式:

(1)网页下载

直接下载zip

(2)命令下载

Git clone --depth=1 https://github.com/raspberrypi/linux

git clone https://github.com/raspberrypi/tools

保存路径为~/Raspberry/下

2.确定版本

2.1查看当前树莓派编译器的信息

root@raspberrypi:~# cat /proc/version 

linux version 4.4.38-v7+ (dc4@dc4-XPS13-9333) (gcc version 4.9.3 (crosstool-NG crosstool-ng-1.22.0-88-g8460611) ) #894 SMP Mon Jun 13 13:13:27 BST 2016


2.2 确定交叉编译工具

root@ubuntu:~/Raspberry/tools-master/arm-bcm2708# ls

arm-bcm2708hardfp-linux-gnueabi

arm-bcm2708-linux-gnueabi

arm-rpi-4.9.3-linux-gnueabihf

gcc-linaro-arm-linux-gnueabihf-raspbian

gcc-linaro-arm-linux-gnueabihf-raspbian-x64


此目录下有5个目录,是不同版本的交叉编译工具。其中arm-rpi-4.9.3-linux-gnueabihf和gcc-linaro-arm-linux-gnueabihf-raspbian-x64是64位机器用的。

每一个交叉编译工具的目录下都有bin目录进入,执行./arm-linux-gnueabihf-gcc -v可查看gcc版本。

这里我使用arm-rpi-4.9.3-linux-gnueabihf,因为目前板子上的gcc版本是4.9.3

3.开始编译

3.1 进入linux内核目录:

$ cd ~/Raspberry/linux-rpi-4.4.y

$ 修改内核根目录的Makefile文件,修改下面的这两行

  ARCH      ?=arm

  CROSS_COMPILE ?=/home/xxx/Raspberry/tools-master/arm-bcm2708/arm-rpi-4.9.3-linux-gnueabihf/bin/arm-linux-gnueabihf-

(xxx表示你自己的用户名)

$ KERNEL=kernel7

$ make bcm2709_defconfig

Note:如果是多处理系统可以添加选项-j n ,n为数字,表示多处理器的数量*1.5。可以加快编译速度

$ make -j4 zImage modules dtbs


3.2 创建目录modules

在linux内核目录顶层下创建modules目录。

$ mkdir modules

$ make INSTALL_MOD_PATH=modules modules_install



3.3 将SD卡插入读卡器,插入电脑,在虚拟机读取SD卡。

在/media/xxx/ 目录下会出现两个目录 PI_BOOT/ PI_ROOT/


执行命令

sudo scripts/mkknlimg arch/arm/boot/zImage /media/xxx/PI_BOOT/$KERNEL.img

sudo cp arch/arm/boot/dts/*.dtb /media/xxx/PI_BOOT/

sudo cp arch/arm/boot/dts/overlays/*.dtb* /media/xxx/PI_BOOT/overlays/

sudo cp arch/arm/boot/dts/overlays/README /media/xxx/PI_BOOT/overlays/

sudo cp -r modules/lib/ /media/xxx/PI_ROOT/ 

4.将SD卡插回树莓派,重新启动树莓派,查看系统版本变成了 4.4.50-v7 ,则成功更新了内核,以后就可以使用源码来编写树莓派驱动了。


你可能感兴趣的:(树莓派3B内核移植)