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

简介:

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


初级:

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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  (自备墙梯)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# 利用 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-ng
make  &&  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 .bz2
svn co svn: //svn .eglibc.org /branches/eglibc-2_16  eglibc-2.16
wget http: //ftp .gnu.org /gnu/gmp/gmp-5 .1.3. tar .gz
wget http: //bugseng .com /products/ppl/download/ftp/releases/1 .0 /ppl-1 .0. tar .gz
http: //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来
# 完成的 :)


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




     本文转自My_King1 51CTO博客,原文链接:http://blog.51cto.com/apprentice/1405308,如需转载请自行联系原作者




相关文章
|
20天前
|
存储 安全 Linux
探索Linux操作系统的心脏:内核
在这篇文章中,我们将深入探讨Linux操作系统的核心—内核。通过简单易懂的语言和比喻,我们会发现内核是如何像心脏一样为系统提供动力,处理数据,并保持一切顺畅运行。从文件系统的管理到进程调度,再到设备驱动,我们将一探究竟,看看内核是怎样支撑起整个操作系统的大厦。无论你是计算机新手还是资深用户,这篇文章都将带你领略Linux内核的魅力,让你对这台复杂机器的内部运作有一个清晰的认识。
48 3
|
1月前
|
缓存 安全 Unix
Linux 内核黑客不可靠指南【ChatGPT】
Linux 内核黑客不可靠指南【ChatGPT】
|
1月前
|
Linux 开发者
Linux内核贡献成熟度模型 【ChatGPT】
Linux内核贡献成熟度模型 【ChatGPT】
|
1月前
|
网络协议 Ubuntu Linux
用Qemu模拟vexpress-a9 (三)--- 实现用u-boot引导Linux内核
用Qemu模拟vexpress-a9 (三)--- 实现用u-boot引导Linux内核
|
1月前
|
Linux
用clang编译Linux内核
用clang编译Linux内核
|
1月前
|
Linux API C语言
Linux 内核补丁提交的清单 【ChatGPT】
Linux 内核补丁提交的清单 【ChatGPT】
|
1月前
|
安全 Linux 开发者
Linux内核管理风格 【ChatGPT】
Linux内核管理风格 【ChatGPT】
|
1月前
|
Linux 程序员 编译器
Linux内核驱动程序接口 【ChatGPT】
Linux内核驱动程序接口 【ChatGPT】
|
1月前
|
存储 Linux 开发工具
如何进行Linux内核开发【ChatGPT】
如何进行Linux内核开发【ChatGPT】
|
1月前
|
Unix Linux API
Linux内核许可规则 【ChatGPT】
Linux内核许可规则 【ChatGPT】
下一篇
无影云桌面