获得内核源码:
Linux-2.6.37.4.tar.bz2(在光盘资料/源码包/kernel源码目录下)
也可到官方网站HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH获得最新版本的内核源码
解压源码,进入目录:
#tar xjvf linux-2.6.37.4.tar.bz2
#cd linux-2.6.37.4
由于我们没有使用root用户登录ubuntu系统,刚解压出的文件夹和文件还没有可写权限,我们要给源码目录加上所有权限,以方便后面的修改操作:
#sudo chmod 777
linux-2.6.37.4 -R
参数-R表示递归地改变每个子目录下文件的权限
96B
修改
Makefile文件: 191行:
97BARCH ?= arm ß指定系统硬件架构
98BCROSS_COMPILE ?= arm-linux- ß指定交叉编译器
99B创建XC2440的初始化文件:
100B仿照arch/arm/mach-s3c2440/mach-smdk2440.c,在arch/arm/mach-s3c2440目录下编写针对XC2440开发板的初始化文件,取名为:mach-xc2440.c(可以直接复制mach-smdk2440.c文件,只保留其中的头文件)
101B主要代码如下:
- static struct map_desc xc2440_iodesc[ ] __initdata = {
-
/* No use */
-
};
-
-
static struct s3c2410_uartcfg xc2440_uartcfgs[ ] __initdata = {
-
[0] = {
-
.hwport = 0,
-
.flags = 0,
-
.ucon = 0x3c5,
-
.ulcon = 0x03,
-
.ufcon = 0x51,
-
},
-
[1] = {
-
.hwport = 1,
-
.flags = 0,
-
.ucon = 0x3c5,
-
.ulcon = 0x03,
-
.ufcon = 0x51,
-
},
-
[2] = {
-
.hwport = 2,
-
.flags = 0,
-
.ucon = 0x3c5,
-
.ulcon = 0x03,
-
.ufcon = 0x51,
-
}
-
};
-
-
static struct platform_device *xc2440_devices[ ] __initdata = {
-
-
};
-
-
static void __init xc2440_machine_init(void)
-
{
-
platform_add_devices(xc2440_devices, ARRAY_SIZE(xc2440_devices));
-
}
-
-
static void __init xc2440_map_io(void)
-
{
-
s3c24xx_init_io(xc2440_iodesc, ARRAY_SIZE(xc2440_iodesc));
-
s3c24xx_init_clocks(12000000);
-
s3c24xx_init_uarts(xc2440_uartcfgs, ARRAY_SIZE(xc2440_uartcfgs));
-
}
-
-
MACHINE_START(XC2440, "XC2440")
-
.boot_params = S3C2410_SDRAM_PA + 0x100,
-
.init_irq = s3c24xx_init_irq,
-
.map_io = xc2440_map_io,
-
.init_machine = xc2440_machine_init,
-
.timer = &s3c24xx_timer,
-
MACHINE_END
147B
修改同目录(arch/arm/mach-s3c2440/)下的Kconfig和Makefile文件,加入对xc2440开发板的支持
148B在Kconfig文件的最后面加入:
- config MACH_XC2440
- bool "XC2440 development board with S3C2440 CPU module "
- select CPU_S3C2440
- select S3C_DEV_NAND
- help
- Say Y here if you are using the XC2440 development board.
- endmenu
149B
156B在Makefile文件中加入:
- obj-$(CONFIG_MACH_XC2440) += mach-xc2440.o
158B修改机器码(这个要和bootloader的匹配):
159B找到s3c2440的机器码,在arch/arm/tools/mach-types 379行:
160Bs3c2440 ARCH_S3C2440 S3C2440 362
161B最后面的数字362就是机器码,xc2440的uboot中的机器码也是362
162B但是这个机器码对应的machine是S3C2440,而我们的machine是XC2440
163B因为mach-xc2440.c中定义了MACHINE_START(XC2440,
"XC2440")
164B把379行用#注释掉,在下面加一行:
- #s3c2440 ARCH_S3C2440 S3C2440 362
-
-
xc2440 MACH_XC2440 XC2440 362
167B配置内核:
168B#make
menuconfig ß进入图形化配置界面
启动时可能会报错,因为运行menuconfig需要ncurses 库的支持,新安装的ubuntu10.10中没有这个库,那我们就手动下载这个库:
#sudo apt-get install
libncurses5-dev
等待安装完这个库后,再执行#make menuconfig就可以进入图形配置界面了
169B在配置菜单中选择这一项:“Load an Alternate
Configuration File”
170B输入2440的默认配置文件:arch/arm/configs/s3c2410_defconfig
171B然后选择OK,按回车
172B进入“System Type”选项单,里面的选项保持默认
173B
在“S3C24XX Machine” 这6组选项中,依次进入,把其中的所有平台选项都取消,只选中“S3C2440”中的“XC2440”,完整配置如下:
- S3C2410 Machines --->
-
[ ] SMDK2410/A9M2410
-
[ ] IPAQ H1940
-
[ ] Acer N30 family
-
[ ] Simtec Electronics BAST (EB2410ITX)
-
[ ] NexVision OTOM Board
-
[ ] AML M5900 Series
-
[ ] TCT Hammer Board
-
[ ] Thorcom VR1000
-
[ ] QT2410
- S3C2412 Machines --->
-
[ ] Logitech Jive
-
[ ] SMDK2413
-
[ ] SMDK2412
-
[ ] VMSTMS
- S3C2416 Machines --->
-
[ ] SMDK2416
- S3C2440 and S3C2442 Machines --->
-
[ ] Simtec Electronics ANUBIS
-
[ ] Openmoko GTA02 / Freerunner phone
-
[ ] Simtec IM2440D20 (OSIRIS) module
-
[ ] HP iPAQ rx3715
-
[ ] SMDK2440
-
[ ] NexVision NEXCODER 2440 Light Board
-
[ ] SMDK2440 with S3C2440 CPU module
-
[ ] SMDM2440 with S3C2442 CPU module
-
[ ] Avantech AT2440EVB development board
-
[ ] MINI2440 development board
-
[ ] HP iPAQ rx1950
-
[*] XC2440 development board with S3C2440 CPU module
- S3C2443 Machines --->
-
[ ] SMDK2443
176B让内核支持EABI编译器:
- Kernel Features --->
-
[*] Use the ARM EABI to compile the kernel
-
[*] Allow old ABI binaries to run with this kernel (EXPERIMENTA)
180B配置完后,回到主菜单,选择这一项“Save
an Alternate Configuration File”输入要保存的配置文件名称:.config
(注意config前面有一个“点”)
181B编译内核的时候,就会找.config这个配置文件,所以第一次配置完后一定要保存成这个文件名,以后每次配置完退出后都会自动保存成.config,无需手动保存
182B
选择按回车,退回主菜单,选择退出配置,弹出窗口,提示是否要保存配置,选择按回车
183B编译内核:
#make zImage (注意:I是大写的i)
184B编译完成后,会在arch/arm/boot下生成内核镜像文件,镜像名为:zImage
185B把zImage镜像烧进NandFlash的kernel分区中跑一下,看终端是否正常打印出信息并正常引导操作系统
186B如果第一步能正常引导内核,那就开始进行第二步,添加驱动
小超嵌入式工作室出品, 转载请注明出处,谢谢合作!