TE2410移植linux-2.6.14及调试过程总结(1)
#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_da
}
};
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
TE2410移植linux-2 6 14调试过 相关文章:
- TE2410移植linux-2.6.14及调试过程总结(2)(11-10)
- 达芬奇数字媒体片上系统的架构和Linux启动过程(06-02)
- 基于TMS320DM642的农药喷洒系统(04-22)
- 用DSP56F805 PWM模块输出高频正弦波(05-25)
- 一种基于DSP平台的快速H.264编码算法的设计(05-19)
- 基于DSP的信号采集处理系统(07-21)