如何编译树莓派内核
作者:互联网
老实说,对于从来没有用过玩过Linux(甚至没有基本的Linux管理经验)的我来说,编译内核实在是一个比较挑战的事情。
不过结果还是好的,最终完成了一次完整的编译,在这里记录一下(参考网页在这里和这里)
主要步骤如下
- 虚机:[可选]新建交叉编译平台
- 下载:源代码、编译器、固件文件和一些关联工具
- 编译:内核、模块
- 拷贝:将生成的各种文件替换原树莓派系统的文件
- 虚机
树莓派上编译内核实在是太慢,所以重装了一个Ubuntu的虚拟机,虚拟机的安装可以参考这里
同时为了后续拷贝文件的方便,需要安装SSH服务,可以参考这里
-install ssh services sudo apt-get install openssh-server openssh-client sudo gedit /etc/ssh/sshd_config sudo /etc/init.d/ssh stop sudo /etc/init.d/ssh start sudo /etc/init.d/ssh restart -examples: ssh localhost ssh user@your-server-ip-address ssh vivek@userver.mydomain.com |
- 下载
在虚拟机中新建目录后,分别下载固件,源码,编译器(分别新建指定的文件夹)
mkdir rasperberrypi cd raspberrypi git clone git://github.com/raspberrypi/firmware.git PRiFirmware git clone git://github.com/raspberrypi/linux.git RpiLinux git clone git://github.com/raspberrypi/tools.git RpiTools |
不过,如果在虚拟机中下载太慢也可以在主机中使用下载工具下载,例如使用以下地址下载3.6版本的内核
https://github.com/raspberrypi/linux/archive/rpi-3.6.y.tar.gz tar zxvf linux-rpi-3.6.y.tar.gz |
对于虚拟机和树莓派中的文件操作,对于我来说,推荐使用Win SCP,点击这里下载
如果网络环境需要代理,虚拟机中可以如下设置
sudo nano /etc/apt/apt.conf Acquire::http::Proxy "http://web-proxy.corp.company.com:8080"; |
- 编译
以下操作都在root用户下执行
使用Win SCP递归的方式将源代码文件夹的运行属性添加上
清空原先的配置信息
make mrproper cd /home/andy/raspberrypi/RpiLinux/ |
添加两个环境变量
export KERNEL_SRC=/home/andy/raspberrypi/RpiLinux/ export CCPREFIX=/home/andy/raspberrypi/RpiTools/arm-bcm2708/arm-bcm2708-linux-gnueabi/bin/arm-bcm2708-linux-gnueabi- |
导出树莓派上的配置信息,并拷贝到内核源代码的根目录
zcat /proc/config.gz > .config |
在此基础上设置一次树莓派的配置信息(如果不明白意义,直接回车保留默认值即可)
apt-get install libncurses5-dev ARCH=arm CROSS_COMPILE=${CCPREFIX} make oldconfig |
对配置还可以进行微调
ARCH=arm CROSS_COMPILE=${CCPREFIX} make menuconfig |
开始编译内核,如果CPU多核,可以添加-j参数(数字为内核数+1)
ARCH=arm CROSS_COMPILE=${CCPREFIX} make -j5 |
如果需要详细的日志
ARCH=arm CROSS_COMPILE=${CCPREFIX} make -j5 &>log --undefined reference to 'sin'; add '-lm' to make file command line |
编译模块
ARCH=arm CROSS_COMPILE=${CCPREFIX} make modules |
- 拷贝
生成内核文件,并拷贝到树莓派根目录的boot文件夹
cd /home/andy/raspberrypi/RpiTools/mkimage ./imagetool-uncompressed.py /home/andy/raspberrypi/RpiLinux/arch/arm/boot/zImage copy .img to RPI's boot folder |
生成模块文件,并将这些文件覆盖掉树莓派的/boot/lib文件夹下的文件
export MODULES_TEMP=~/modules ARCH=arm CROSS_COMPILE=${CCPREFIX} INSTALL_MOD_PATH=${MODULES_TEMP} make modules_install copy and overwrite files from lib to RPI's /root/lib |
拷贝下载的固件包firmware/boot中文件,替换树莓派中boot文件夹下的文件
bootcode.bin fixup.dat start.elf copy and overwrite files from firmware/boot to RPI's boot folder |
拷贝下载的固件包firmware/hardfp/opt/中VC文件夹,覆盖树莓派的boot/opt/VC文件夹
VC copy and overwirte folder from firmware/hardfp/opt/ to RPI's boot opt folder |
结束
重启树莓派,输入uname –a命令就可以看到编译后内核的版本(我的是越变越小,呵呵呵)
原来的版本
现在的版本
Andy Yang
2014-4-18
转载于:https://www.cnblogs.com/zygoses2gether/p/3673721.html
标签:树莓,git,boot,raspberrypi,编译,内核,arm 来源: https://blog.csdn.net/weixin_30808253/article/details/96824691