树莓派交叉编译

第1部分:搭建交叉编译环境 tools

1) 下载工具链
$ git clone git://github.com/raspberrypi/tools.git tools

2) 下载最新的BCM2835 SDK,并交叉编译出libbcm2835.a
注意:--host 指定的是交叉编译工具链的前缀
$ wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.35.tar.gz 
$ tar xzf bcm2835-1.35.tar.gz 

$ cd bcm2835-1.35

$ ./configure --host=arm-linux-gnueabihf
$ make
$ ls -l src/libbcm2835.a


第2部分:编译 Linux kernel

1) 下载 linux-rpi 源代码

注意:我测试过很多zip源码包,编译都有错误。目前只有git clone的源代码才可以正常工作。
$ git clone git://github.com/raspberrypi/linux.git linux-rpi


2) 从运行的树莓派中获得内核配置文件,并据此生成新的 .config

注意:ARCH类型和编译器路径
$ cd linux-rpi

$ scp pi@192.168.2.110:/proc/config.gz ./

$ zcat config.gz > .config

$ make ARCH=arm CROSS_COMPILE=~/workspace/tools/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/bin/arm-bcm2708hardfp-linux-gnueabi- menuconfig


3) 编译内核镜像,并解压缩zImage到kernel.img

注意:-j4 是同时用4个job来编译,可以加快速度

$ make ARCH=arm CROSS_COMPILE=~/workspace/tools/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/bin/arm-bcm2708hardfp-linux-gnueabi- -j4

    Physical address of main memory (PHYS_OFFSET) [] (NEW)0x48000000

    ...

编译完成后,arch/arm/boot/zImage就是我们编译获得的文件。

zImage 是 Compressed kernel image 文件,要转换为 kernel.img 还需要进一步处理。

执行下面的命令,在当前目录下面就有新生成的kernel.img

$ cd tools/mkimage/
$ ./imagetool-uncompressed.py ../../linux-rpi/arch/arm/boot/zImage
 


4) 提取模块文件

新的Kernel要正确运行,还需要编译所需的module,主要对应”/lib”目录下的内容。

$ cd linux-rpi
$ make modules_install ARCH=arm CROSS_COMPILE=~/workspace/tools/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/bin/arm-bcm2708hardfp-linux-gnueabi- INSTALL_MOD_PATH=../upgrade-rpi.3.18.11

第3部分:升级树莓派的Firmwarekernellib

注意:将SD卡拔下插在电脑上(可使用读卡器)

1) 下载 firmware 源代码
$ git clone git://github.com/raspberrypi/firmware.git

2)升级树莓派前,首先备份相关文件

$ cd ~/workspace/upgrade-rpi.bak
$ cp -r /media/bambreeze/boot/ ./
$ cp -r /media/bambreeze/5d18be51-3217-4679-9c72-a54e0fc53d6b/lib/ ./
$ cp -r /media/bambreeze/5d18be51-3217-4679-9c72-a54e0fc53d6b/opt/vc ~/workspace/upgrade-rpi.bak/

3) 升级 firmware

打开firmware/boot/目录,将以下文件拷入SD卡boot分区:

fbootcode.bin fixup.dat fixup_cd.dat start.elf

$ cd ~/workspace/firmware/boot
$ sudo cp bootcode.bin fixup.dat fixup_cd.dat start.elf /media/bambreeze/boot/


然后,将新的vc库复制到SD卡,因为之前选用的工具链是hardfp(硬浮点),所以现在所选用的vc库也是硬浮点的版本(firmware/hardfp/opt/vc)。

$ cd ~/workspace/firmware/hardfp/opt/
$ sudo cp -r vc/ /media/bambreeze/5d18be51-3217-4679-9c72-a54e0fc53d6b/opt/

4) 升级 kernel
将新编好的内核拷入SD卡boot分区,改名为:kernel_3_18_11.img
打开SD卡的boot分区,找到config.txt文件,加入:kernel=kernel_3_18_11.img这一行

$ cd ~/workspace/upgrade-rpi.3.18.11/
$ sudo cp kernel.img /media/bambreeze/boot/kernel_3_18_11.img


$ cd /media/bambreeze/boot
$ vim config.txt

kernel=kernel_3_18_11.img

5) 升级 modules
将新编好的 lib 拷入SD卡的根分区

$ cd upgrade-rpi.3.18.11/
$ sudo cp -r lib/ /media/bambreeze/5d18be51-3217-4679-9c72-a54e0fc53d6b/


How to update to v3.16.5

$ cd ~/workspace/upgrade-rpi.3.16.5/
$ sudo cp kernel.img /media/bambreeze/boot/kernel_3_16_5.img
$ sudo cp -r lib/ /media/bambreeze/5d18be51-3217-4679-9c72-a54e0fc53d6b/

$ cd /media/bambreeze/boot
$ vim config.txt
kernel=kernel_3_16_5.img


参考资料

1. 树莓派学习笔记——交叉编译工具链

2. configure交叉编译

3. C library for Broadcom BCM 2835 as used in Raspberry Pi

4. Raspberry Pi -- Cross Compiling on Mac OSX

5. ARM EABI Toolchains

6. Cross compiling for RaspBerry/BeagleBone on Mac OS X – Part 1/3

7. 树莓派交叉编译环境搭建 for Mac 

8. 树莓派开发系列教程8——树莓派内核编译与固件升级

9. 树莓派上编译linux内核

10. [raspberry pi] 树莓派 Kernel 编译笔记

11. Lab4_1树莓派上增加一个Linux系统调用

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值