定制属于自己的 linux 内核(Step 3)

时间:2021-06-23 16:34:26

步骤:
   跨平台编译准备条件, 跨平台编译环境一般是arm版的gcc,定制好的linux源码
   本文针对Raspberry Pi的linux 交叉编译 arm


初级:

   Raspberry Pi官方已经提高了一系列的工具,帮助爱好者进行定制的行动,例如
   比较流行的ARCH Linux就是其中之一.基本过程也比较简单易懂,适合新手.

1. 下载官方为Raspberry Pi定制好的arm版gcc工具 (arm-bcm2708hardfp-linux-gnueabi)https://github.com/raspberrypi/tools
.
2. 解压工具tools-master.zip,产生tools文件夹
unzip tools-master.zip
.
3. 将解压后内核关于arm的配置选项进行复制
cp tools/configs/bcm2708hardfp-ct-ng.config /usr/src/linux-3.13.6/.config
.
---------------------------------------------------------------------
.
4. 确保你第一步已经将 tools/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/bin/ 该目录已经添加了环境变量
make ARCH=arm CROSS_COMPILE=arm-bcm2708hardfp-linux-gnueabi- -j 4
.
5. 将编译好的内核文件进行解压,形成kernel.img
tools/mkimage/imagetool-uncompressed.py /usr/src/linux-3.13.6/arch/arm/boot/zImage
.
6. 准备启动内核 of 为 sd卡设备路径
dd bs=1M if=kernel.img of=/dev/sdb

注: windows的话,使用Win32DiskImager
当然你也可以不要官方的tools来实现,可以下载arm-linux-gcc,将CROSS_COMPILE替换成arm-linux-即可

前提条件是你已经将arm-linux-gcc的bin目录添加到了环境变量中


进阶:

   手动构建arm工具链 (为arm平台软件编译,运行提供基础必要环境),可参见
   http://elinux.org/RPi_Kernel_Compilation#Use_the_provided_compiler  (自备墙梯)

# 利用 yum 源安装以下依赖yum -y install gperf texinfo.# 下载crosstool-ng源码包(这里尽量选择高版本的包,否则麻烦将与你随行 :)wget http://down1.chinaunix.net/distfiles/crosstool-ng-1.17.0.tar.bz2.# 解压安装tar xf crosstool-ng-1.17.0.tar.bz2./configure --prefix=/usr/local/crosstool-ngmake && make install.# 导出环境变量echo "PATH=/usr/local/crosstool-ng/bin:$PATH" > /etc/profile.d/ct-ng.sh.# 重载环境变量. /etc/profile.d/ct-ng.sh.# 配置工具链ct-ng.sh menuconfig.# 选项如下:# 详见 /usr/local/crosstool-ng/share/doc/crosstool-ng/ct-ng.1.17.0/crosstool-NG 1.17.0 Configuration    --->Paths and misc options        --->(*) Try features marked as EXPERIMENTAL        --->(path) Local tarballs directory        --->(path) Prefix directory        --->(4) Number of parallel jobs    --->Target options        --->Target Architecture (arm)        --->Bitness: (32-bit)        --->Endianness: (Little endian)        --->(armv4t) Architecture level        --->(arm9tdmi) Emit assembly for CPU        --->(arm920t) Tune for CPU    --->Operating System        --->Target OS (linux)    --->C compiler (gcc)        --->(*) Linaro versions (EXPERIMENTAL)        --->gcc version (linaro-4.7-2012.10 (EXPERIMENTAL))    --->Toolchain options        --->(king) Tuple's vendor string# 编辑当前目录下 .config将 CT_WANTS_STATIC_LINK=y 改为 CT_WANTS_STATIC_LINK is not set.# 下载以下软件到 --->(path) Local tarballs directory 此选项所规定的路径中去wget https://launchpad.net/gcc-linaro/4.7/4.7-2012.10/+download/gcc-linaro-4.7-2012.10.tar.bz2svn co svn://svn.eglibc.org/branches/eglibc-2_16 eglibc-2.16wget http://ftp.gnu.org/gnu/gmp/gmp-5.1.3.tar.gzwget http://bugseng.com/products/ppl/download/ftp/releases/1.0/ppl-1.0.tar.gzhttp://nchc.dl.sourceforge.net/project/duma/duma/2.5.15/duma_2_5_15.tar.gz.# 构建arm编译工具链(此过程较长)ct-ng build.# 构建完毕后将当前目录bin添加到环境变量# 重复初级第四步过程将CROSS_COMPILE替换成刚刚构建好的arm-# king-linux-gnueabi-gcc即可,细心的朋友可能会注意到其实# raspberry官方提供的tools工具其实就是利用cross-tool-ng来# 完成的 :)


写在最后 , 两天无数次的尝试 , 还有一定瑕疵 , 修正后上图加详细注释...

本文出自 “Apprentice” 博客,请务必保留此出处http://apprentice.blog.51cto.com/2214645/1405308