嵌入式armlinux内核编译注意事项 arm linux内核编译

1、获得Linux内核源码

获得内核源码,将其拷贝到工作目录,并解压。


2、修改Makefile文件

为了交叉编译内核,需要修改内核的底层Makefile:


嵌入式armlinux内核编译注意事项 arm linux内核编译

找到下面的两行(192行左右):

修改为:

上面这样修改的意思是说我们的目标平台是arm,使用的交叉编译器的前缀是

arm-linux-.

1、得到.config文件

编译内核时会依赖于源代码目录下的.config 文件。如果没有这个文件,在make

menuconfig的时候,会默认按照i386的配置生成.config文件,而这不是我们需要的。因

此我们要有自己的.config文件。

由于我们的配置和SMDK2410开发板的类似,因此可以使用它的.config文件,只需要

把它的.config文件拷贝到源代码根目录下的.config文件即可:

找到struct mtd_partitionsmdk_default_nand_part[]这个结构体,并修改它。

改前的代码:

static struct mtd_partition smdk_default_nand_part[] ={

[0] = {

.name = "BootAgent",

.size = SZ_16K,

.offset = 0,

},

[1] = {

.name = "S3C2410 flashpartition 1",

.offset= 0,

.size = SZ_2M,

},

[2] = {

.name = "S3C2410 flashpartition 2",

.offset = SZ_4M,

.size = SZ_4M,

},

[3] = {

.name = "S3C2410 flashpartition 3",

.offset = SZ_8M,

.size = SZ_2M,

},

[4] = {

.name = "S3C2410 flashpartition 4",

.offset = SZ_1M * 10,

.size = SZ_4M,

},

[5] = {

.name = "S3C2410 flashpartition 5",

.offset = SZ_1M * 14,

.size = SZ_1M *10,

},

[6] = {

.name = "S3C2410 flashpartition 6",

.offset = SZ_1M * 24,

.size = SZ_1M *24,

},

[7] = {

.name = "S3C2410 flashpartition 7",

.offset = SZ_1M * 48,

.size = SZ_16M,

}

};

修改后的结构体如下面的代码所示:

static struct mtd_partition smdk_default_nand_part[] ={

[0] = {

.name = "Bootloader",

.size = 0x80000,

.offset = 0,

},

[1] = {

.name = "Linux Kernel",

.offset = 0x80000,

.size = SZ_2M,

},

[2] = {

.name = "Root File System",

.offset = 0x280000,

.size = SZ_4M,

},

[3] =【】 {

.name = "User Space",

.offset = 0x680000,

.size = 0x3980000,

},

};

这样就把我们的64M的NANDFlash分为四个区:

第一个区从0x00000000到0x00080000,大小为0.5M

第二个区从0x00080000到0x00280000,大小为2M

第三个区从0x00280000到0x00680000,大小为4M

第四个区从0x00680000到0x04000000,大小为57.5M

5、添加网卡驱动支持

开发板上配置了DM9000A网卡,内核已经有网卡驱动的实现代码,需要我们做一定的

配置。在arch/arm/mach-s3c2410/mach-smdk2410.c文件中添加如下内容:

static struct resources3c_dm9ks_resource[] = {

[0] = {

.start = 0x10000000,

.end = 0x10000040,

.flags = IORESOURCE_MEM,

},

[1] = {

.start = IRQ_EINT2,

.end = IRQ_EINT2,

.flags = IORESOURCE_IRQ,

},

};

struct platform_devices3c_device_dm9ks = {

.name = "s3c2410-dm9ks",

.id = -1,

.num_resources = ARRAY_SIZE(s3c_dm9ks_resource),

.resource = s3c_dm9ks_resource,

};

然后,把网卡数据加入smdk2410_devices数组:

static structplatform_device *smdk2410_devices[] __initdata = {

&s3c_device_usb,

&s3c_device_lcd,

&s3c_device_wdt,

&s3c_device_i2c,

&s3c_device_iis,

&s3c_device_dm9ks,

};

6、添加YAFFS文件系统支持

将我们提供的YAFFS的源代码yaffs2.tar.gz拷贝到linux-2.6.24.4的同级目

录下,解压该源码包,获得YAFFS源码:

然后进入yaffs2目录,运行./patch-ker.sh给内核打上补丁:

这样打好补丁以后,再做正确的配置,内核就可以支持YAFFS文件系统了。

7、配置和编译内核

到现在,一个简单的内核就准备好了,我们还需要做一些配置,然后编译,内核才能

正常使用。

在内核源代码的根目录下运行 make menuconfig命令,进入配置界面:

01、选择硬件系统

做如下选择

System Type --->

S3C2410 Machines --->

[*] SMDK2410/A9M2410

[ ] IPAQ H1940

[ ] Acer N30

[ ] Simtec Electronics BAST (EB2410ITX)

[ ] NexVision OTOM Board

[ ] AML M5900 Series

[ ] Thorcom VR1000

[ ] QT2410

其他的:

S3C2400 Machines --->

S3C2412 Machines --->

S3C2440 Machines --->

S3C2442 Machines --->

S3C2443 Machines --->

上面的四个选项下的所有选项都不要选,以减小内核体积。

02、配置NAND Flash驱动

做如下选择:

Device Drivers --->

<*> MemoryTechnology Device (MTD) support --->

<*> NAND DeviceSupport --->

<*> NAND Flashsupport forS3C2410/S3C2440 SoC

03、配置文件系统

做如下配置,以支持CRAMFS文件系统和YAFFS文件系统,为了调试方便,也

选上NFS文件系统的支持:

File systems--->

Miscellaneous filesystems--->

<*> YAFFS2 filesystem support

-*- 512 byte / page devices

[ ] Use older-style on-NAND data format withpageStatus byte

[ ] Lets Yaffs do its own ECC

-*- 2048 byte (or larger) / pagedevices

[*] Autoselect yaffs2 format

[ ] Disable lazy loading

[ ] Turn off wide tnodes

[ ] Force chunk erase check

[*] Cache short names in RAM

< > JournallingFlash File System v2 (JFFS2) support

<*> Compressed ROMfile system support (cramfs)

[*] Network File Systems--->

--- NetworkFile Systems

<*> NFS file systemsupport

[*] Provide NFSv3 client support

[*] Provideclient support for the NFSv3 ACL protocol

extension

[ ] ProvideNFSv4 client support (EXPERIMENTAL)

[*] Allowdirect I/O on NFS files

< > NFS serversupport

[*] Root filesystem on NFS

这样,内核的配置基本上就做好了。如果有兴趣,可以自己查看内核的其他配

置,并决定是否选择某项功能,以适合自己的开发板。

在内核源文件的根目录下运行make命令编译内核,编译完成后,会在内核linux-2.6.24.4/arch/arm/boot目录下生成zImage文件。这个文件就是内核的镜像文件。经过处理,可以启动。

8、用U-Boot启动内核

编译U-Boot时在源代码的tools目录下会生成一个mkimage可执行文件,用这个工具

可以对前面编译内核时生成的zImage进行处理,以供U-Boot启动。

cdlinux-2.6.24.4/arch/arm/boot

cp/up-Star2410/kernel/linux-2.6.24.4/mkimage .获取mkimage工具

./mkimage -A arm -T kernel-C none -O linux -a 0x30008000 -e 0x30008040 -d

zImage -n 'Linux-2.6.24'uImage

l-Aarm指定CPU的体系结构,目标平台是ARM构架的

l-T kernel 要处理的是内核

l-Cnone 不采用任何压缩方式-O linux要处理的Linux内核

l-a0x30008000加载地址,包括mkimage工具给内核添加的头信息

l-e0x30008040真正的内核入口地址,除掉mkimage添加的0x40长度的头信息

l-dzImage使用的源文件是编译Linux内核得到的zImage

l-n linux-2.6.24 生成的内核镜像的名字

luImage生成的供U-Boot启动的二进制内核镜像

这样会在这个目录下生成uImage,把uImage放入主机的TFTP目录下,启动开发板,

用U-Boot的tftp命令下载uImage到SDRAM,并启动。

  

爱华网本文地址 » http://www.aihuau.com/a/25101014/237290.html

更多阅读

搬家要注意什么-9点搬家注意事项详述 搬家的注意事项

搬家要注意什么-9点搬家注意事项详述——简介搬家是大事,很多搬家注意事项对于很多年轻人甚至有些有经验的老人都不知道,这些风水上的东西信则有,不信则无,还要看个人对这个事的态度,今天把搬家需要注意的9点注意事项总结如下。搬家要注

婚前检查项目和注意事项 精 胃镜检查前注意事项

婚前检查项目和注意事项 精——简介婚前检查是结婚前进行的体检项目,能提高人口素质、降低出生缺陷、预防先天疾病,也是夫妻彼此的一项权利,虽然新婚姻法去除了强制婚检的要求,但为了夫妻彼此的健康以及孩子的健康,应该主动进行婚检。婚

孕晚期注意事项是怎样的 孕晚期胎儿缺氧症状

孕晚期注意事项是怎样的——简介 多食富含蛋白质的食物 ,例如黄豆等。孕晚期注意事项是怎样的?孕晚期的妈妈需要注意些什么问题呢?控制水分和盐分的食量,以免水肿。专家建议孕妇选择营养价值高的食物 ,如动物内脏等等。具体情况,我们一起

月季花的养殖方法及注意事项 蟹爪兰嫁接方法配图

月季花的养殖方法及注意事项——简介 月季花又称“长春花”,有“花中皇后”的美称,盛开在5月--11月间,因为其花质秀美,惹人喜爱,所以大家对月季花是相当情有独钟的,那么月季花的养殖方法及注意事项有哪些呢?一起来看看吧~月季花的养殖方

发财树的养殖方法和注意事项 发财树摆放禁忌

发财树的养殖方法和注意事项——简介发财树的养殖方法和注意事项,特点:耐阴,耐旱要诀:防湿,防冻发财树的养殖方法和注意事项——工具/原料盆土水肥料发财树的养殖方法和注意事项——方法/步骤发财树的养殖方法和注意事项 1、一、环境的

声明:《嵌入式armlinux内核编译注意事项 arm linux内核编译》为网友离人过客分享!如侵犯到您的合法权益请联系我们删除