Linux内核源码针对S3C2440的初步框架交叉编译过程分享
Linux内核源码下载地址:https://www.kernel.org/
我是下载了linux-2.6.30.4.tar.gz,所以就以这个版本来做分享吧!
- 首先是进入工作目录并且创建用于编译Linux内核的子目录
$ cd /work
$ mkdir kernel_build
- 现在进入kernel_build目录,同时将下载好的内核源码拷贝到这里
$ cd kernel_build
$ cp /home/***/Downloads/linux-2.6.30.4.tar.gz .
- 解压内核源码包
tar zxvf linux-2.6.30.4.tar.gz
解压后得到 linux-2.6.30.4目录
- 在顶层目录中打开Makefile,并找到以下内容
ARCH ?= $(SUBARCH)
CROSS_COMPILE ?=
- 将其改为以下内容
ARCH ?= arm
CROSS_COMPILE ?= /usr/local/arm/4.1.2/bin/arm-angstrom-linux-gnueabi-
注1:ARCH是architecture的缩写指的是结构,这里S3C2440属于arm架构
注2:CROSS_COMPILE指的是交叉编译工具链的头(即工具链的前半部分名字)
注3:我的交叉编译工具链用的是eabi
注4:?=的意思是如果没有被赋值过就赋予等号后面的值;:= 的意思是覆盖之前的值;+= 的意思是添加等号后面的值。
保存退出
这个就不细说了吧-_-
配置.config文件
在顶层/arch/arm/configs中很容易找到s3c2410_defconfig,因为2440与2410在很多方面都是一样的,所以这里的配置可以直接用2410 的,现在,为了将2410 的配置项写入顶层的.config文件中,需要在顶层目录执行下面的代码
$ make s3c2410_defconfig
- 配置内核(进入菜单式的配置界面)
注:Makefile是Linux内核编译管理文件(即用来告诉编译器该如何组织编译)
Kconfig文件是配置管理文件,用来管理各配置项,以生成.config文件
.config文件是用来为Makefile提供具体配置项的,从而帮助Makefile来告知编译器该如何组织编译内核源码。
$ make menuconfig
System Type —>//体系确认
ARM system type (Samsung S3C2410, S3C2412, … , S3C2443)Kernel Features —>//内核特性
[*] Use the ARM EABI to compile the kernel //支持eabiBoot options —>//启动项参数设置
Default kernel command string —>//内核启动参数(可内核自定义,也可由uboot传递,此时,我们的目的是检验修改后内核的框架是否正确,所以暂时直接由内核自定义即可)
内容为: root=/dev/mtdblock2 rootfstype=jffs2 console=ttySAC0,115200root=/dev/mtdblock2 //指的是内核启动时文件系统的挂载点,block0用来放bootloader,block1用来放内核,block2用来放文件(系统)
rootfstype=jffs2 //用来指定文件系统类型(文件系统的初始化算法)
console=ttySAC0,115200 //指定与控制台交互的设备为串口,同时指定波特率为115200File systems —>//文件系统支持
[*] Miscellaneous filesystems —>//选中所有jffs2文件系统选项Device Drivers —>//设备驱动配置
<*> Memory Technology Device (MTD) support —>[*] MTD partitioning support //闪存分区支持
<*> NAND Device Support —><*> NAND Flash support for S3C2410/S3C2440 SoC
保存退出
- 编译
$ make -j16
注:-j16的意思是开启8线程编译,用来加快编译速度
得到zImage文件
若编译不出问题,则稍等片刻便可以在顶层目录/arch/arm/boot目录中发现zImage文件。
至此框架搭建已完成,但是针对具体平台的细节还没有做配置,也就是说这并不是一个完整的针对S3C2440的Linux内核镜像,而是一个框架结构是正确的初步的Linux内核镜像,并不能直接拿来用的!后续还有很多具体的工作是必须要做的奥!