- 内核版本:linux-2.6.37.2
- 软件平台:ubuntu 10.10
- 硬件平台:mini2440
建立交叉编译环境
简单来说,就是安装上arm-linux-
等编译工具,对于交叉编译器,我选择了arm920t-eabi.tgz
,版本号是4.1.2,对于新版的内核,busybox
和Qt
都支持。把交叉编译器解压到某路径,如/opt/toolchains/arm920t-eabi
,然后在命令行窗口输入
1 | gedit ~/.bashrc //在最后一行添加 |
然后logout
,再输入arm-linux-gcc -v
,就可以查看arm-linux
的版本信息,建立完成。
开始编译内核
在官网那里下载了一个最新稳定版内核linux-2.6.37.2
,解压到某路径,如/work
,进入内核文件夹。
修改makefile文件
指向交叉编译器,修改如下:
1
2
ARCH ?= arm
CROSS_COMPILE ?= arm-linux-
读取配置文件
`make s3c2410_defconfig`
波特率修改
修改`arch/arm/mach-s3c2440/mach-smdk2440.c`文件
把`s3c24xx_init_clocks(16934400)`里面的`16934400`改成`12000000`。
MTD修改
修改`arch/arm/plat-s3c24xx/common-smdk.c`文件
改成如下,我的mini2440开发板是64M的`nand flash`。所以大小最大值为0x04000000,而且要与mini板上的part show显示的大小一致,对应改就行了。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
static struct mtd_partition smdk_default_nand_part[] = {
[0] = {
.name = "vivi",
.offset = 0,
.size = 0x00040000,
},
[1] = {
.name = "mRtos",
.offset = 0x00040000,
.size = 0x00020000,
},
[2] = {
.name = "kernel",
.offset = 0x00060000,
.size = 0x00500000,
},
[3] = {
.name = "roofs",
.offset = 0x00560000,
.size = 0x03a9c000,
}
};
yaffs补丁
网上下载的yaffs2常见版本, 点击网址下载`https://www.mak-blog.com/download/cvs-root.tar.gz`,一般不支持2.6.36/37, 支持2.6.36/37的yaffs补丁,2011年4月的版本, 下载地址`https://www.mak-blog.com/download/yaffs2.tar.gz`, 下载最新版本请到yaffs.net。 解压后进入yaffs源码目录,打补丁的命令:
1
2
新版:#./patch-kernel.sh c m /work/linux-2.6.37
旧版:#./patch-ker.sh c /work/linux-2.6.37
其实新版就是多了一个参数。
机器码修改
修改arch/arm/tools/mach-types
,mini2440版上的机器码是1999,要与板相对应。
1
s3c2440 ARCH_S3C2440 S3C2440 1999
配置内核
1
2
3
4
5
6
7
8
9
10
11
General setup --->
[*] Configure standard kernel features (for small systems) --->
Kernel Features --->
[*] Use the ARM EABI to compile the kernel
System Type --->
[*] S3C2440 and S3C2442 Machines ---> //切记:只选这个,不要选其他S3C,里面的也只选2个
[*] SMDK2440
[*] SMDK2440 with S3C2440 CPU module
File systems --->
Miscellaneous filesystems --->
<*> YAFFS2 file system support
编译过程中出现的错误
错误1.
1 | *** Unable to find the ncurses libraries or the |
解决方法:apt-get install libncurses*
错误2.
1 | /bin/sh: arm-linux-nm: not found |
解决方法 :进入交叉编译器的目录,建立快捷方式到arm-linux-nmln -s arm-angstrom-linux-gnueabi-nm arm-linux-nm
错误3.
1 | fs/yaffs2/yaffs_fs.c:310: warning: initialization from incompatible pointer type |
解决方法 :安装新版yaffs补丁