微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > TE2410移植linux-2.6.14及调试过程总结(1)

TE2410移植linux-2.6.14及调试过程总结(1)

时间:11-10 来源:互联网 点击:
1.修改Makefile

#cd linux-2.6.14

#vi Makefile

修改内容如下

ARCH =arm

CROSS_COMPILE = arm-linux-

下载交叉编译器arm-linux-gcc3.4.1

http://www.handhelds.org/download/projects/toolchain/arm-linux-gcc-3.4.1.tar.bz2

解压后,把交叉编译工具链的路径添加到环境变量中(修改/etc/bashrc文件)

2.设置Nand Flash分区

修改linux-2.6.14\arch\arm\mach-s3c2410\devs.c

(1)添加下列头文件

#include

#include

#include

(2)添加NandFlash分区表

static struct mtd_partition partition_info[]={

{

name:"bootloader",

size:0x00020000,

offset:0x0,

},

{

name:"param",

size:0x00010000,

offset:0x00020000,

},

{

name:"kernel",

size:0x001c0000,

offset:0x00030000,

},

{

name:"rootfs",

size:0x03e00000,

offset:0x00200000,

//mask_flags:MTD_WRITEABLE,

}//,

};

其中

name:代表分区名字
size:代表flash分区大小(单位:字节)
offset:代表flash分区的起始地址(相对于0x0的偏移)

(3)加入Nand Flash分区

structs3c2410_nand_setnandset={

nr_partitions:4,//5,

partitions:partition_info,

};

nr_partitions:指明partition_info中定义的分区数目
partitions:分区信息表

(4)建立Nand Flash芯片支持

struct s3c2410_platform_nandsuperlpplatform={

tacls:0,

twrph0:30,

twrph1:0,

sets:&nandset,

nr_sets:1,

};

tacls, twrph0, twrph1的意思见S3C2410手册的63,
这3个值最后会被设置到NFCONF中,见S3C2410手册66.
sets:支持的分区集
nr_sets:分区集的个数

(5)加入Nand Flash芯片支持到Nand Flash驱动
另外,还要修改此文件中的s3c_device_nand结构体变量,添加对dev成员的赋值

struct platform_device s3c_device_nand = {

.name= "s3c2410-nand",

.id= -1,

.num_resources= ARRAY_SIZE(s3c_nand_resource),

.resource= s3c_nand_resource,

.dev={

.platform_data =&superlpplatform

}

};

name:设备名称
id:有效设备编号,如果只有唯一的一个设备为1,
有多个设备从0开始计数.
num_resource:有几个寄存器区
resource:寄存器区数组首地址
dev:支持的Nand Flash设备

修改linux-2.6.14\arch\arm\mach-s3c2410\mach-smdk2410.c

static struct platform_device *smdk2410_devices[] __initdata = {

&s3c_device_usb,

&s3c_device_lcd,

&s3c_device_wdt,

&s3c_device_i2c,

&s3c_device_iis,

&s3c_device_nand,

};

(6)禁止Flash ECC校验

内核都是通过UBOOT写到Nand Flash的, UBOOT通过的软件ECC算法产生ECC校验码,这与内核校验的ECC码不一样,内核中的ECC码是由S3C2410中Nand Flash控制器产生的.所以,我们在这里选择禁止内核ECC校验.

修改linux-2.6.14\drivers\mtd\nand\s3c2410.c

找到函数s3c2410_nand_init_chip

最后一条语句chip->eccmode= NAND_ECC_SOFT;

改为chip->eccmode= NAND_ECC_NONE;

3.配置内核选项

参考smdk2410开发板的配置文件,将其默认的配置文件复制到内核代码的根目录下,然后开始配置内核

#cd linux-2.6.14

#cp arch/arm/configs/smdk2410_defconfig.config

#make menuconfig

注意:在每个选项前有个方括号,其中[*]/<*>表示该选项加入内核编译;[ ]/<>表示不选择该选项;表示该选项作为模块编译,也就是说可以动态的加载和卸载该模块.

Loadable module support ->

[*]Enable loadable module support #该选项的目的是使内核支持可加载模块,需要使用modprobe lsmod modinfo insmod rmmod等工具,所以必须选择;

[*]Module unloading #卸载模块选项

[*]Force module unloading#强制性卸载模块选项,如用rmmod –f命令强制卸载;

[ ]Module versioning support

[ ]Source checksum for all modules

[*]Automatic kernel module loading#内核在任务中要使用一些被编译为模块的驱动或特性时,先使用modprobe命令来加载它,然后该选项自动调用modprobe加载需要的模块,所以该选项一定要选择.

加入内核对S3C2410 DMA(Direct Memory Access)的支持,配置如下:

System Type ->

[*]S3C2410 DMA support

修改命令行参数

Boot options ->

Default kernel command string

修改后内容如下:

noinitrd root=/dev/mtdblock3init=/linuxrc console=ttySAC0,115200 mem=64M

或者

noinitrd root=/dev/mtdblock/3init=/linuxrc console=ttySAC0,115200 mem=64M

mtdblock3表示使用Flash的第4个分区(就是rootfs分区),console=ttySAC0表示kernel启动期间的信息全部输出到串口0上,115200表示波特率为115200,

mem=64M表示内存大小为64MB

添加对浮点算法的支持

Floating point emulation ->

[*]NWFPE math emulation#支持NWFPE

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top