您的位置:首页 > 运维架构 > Linux

【1】基于TQ2440的MP3设计——【5、裁剪和移植Linux 2.6 内核】

2015-09-10 20:58 645 查看
3、裁剪和移植Linux 2.6 内核

Linux 2.6.28 内核对基于 S3C2440 的 SMDK2440 目标板有很好支持。因为 EmbedSky 和 SMDK2410 结构相似,所以在 SMDK2440 代码的基础上移植 EmbedSky 。内核移植如下:

1.解压源码包

tar zxvf linux-2.6.28.tar.gz

cd linux-2.6.28

2.修改 Makefile

vim Makefile

修改 ARCH、CROSS_COMPILE 变量如下:

ARCH ?= arm

CROSS_COMPILE ?= arm-linux-

3.取消内核的 NAND 校验

这一步原因在于 U-Boot 的 ECC 算法和内核的 ECC 算法不一致。修改如下:

vim driver/mtd/nand/s3c2410.c

将 NAND_ECC_HW 和 NAND_ECC_SOFT 改成 NAND_ECC_NONE

4.定义晶振频率(12MHz)

vim arch/arm/arch-s3c2440/mach-smdk2440.c

static void __init smdk2440_map_io(void){

s3c24xx_init_io(smdk2440_iodesc, ARRAY_SIZE(smdk2440_iodesc));

s3c24xx_init_clocks(12000000); // 12MHz

...

}

5. 添加 Nand Flash 支持

(1) 定义 Nand Flash 分区:将 Flash 分成三个区:

第一区作为 BootLoader,容量为 0x50000 字节

第二区作为 Kernel 内核,容量为 2M 字节

第三区作为根文件,容量为 32M 字节

(2) 定义 s3c2412_nand_set

(3) 定义 platform_device

(4) 将 s3c_device_nand 加入 platform_devices:

static struct platform_device *smdk2440_devices[] __initdata = {

&s3c_device_nand;

...

};

6. 移植 DM9000 网卡驱动

Linux 自带的 dm9000.c 驱动不能工作,因为驱动只实现了网卡自身工作,没

有初始化系统接口引脚寄存器,添加接口初始化代码:

(1) 修改源文件 include/linux/dm9000.h,给 dm9000_plat_data 增加一个回调指

针。该回调函数的作用是初始化 s3c2440 中与 dm9000 相关的引脚:

struct dm9000_plat_data{

void (*bd_port_init)(void); // 增加的回调

...

};

(2) 修改源文件 driver/net/dm9000.c,在 dm9000_probe 函数中调用该回调

static int __devinit dm9000_probe(struct platform_device *pdev){

struct dm9000_plat_data *pdata = pdev->dev.platform_data;

...

if(pdata->bd_port_init){ // 如果非 NULL

pdata->bd_port_init(); // 调用该函数

}

...

}

(3) 定义 port_init_dm9000()函数作为回调的实体。该函数与具体电路相关,

函数定义见附录 II。

(4) 将设备加入列表:

将 s3c_device_dm9000 加入到 platform_devices 数组:

static struct platform_device *smdk2440_devices[] __initdata = {

&s3c_device_nand,

&s3c_device_dm9000,

`...

};

7. 移植其它驱动。



8. 内核裁剪编译。

(1)把内核自带的 s3c2410 默认配置拷贝到根目录

cp arch/arm/configs/s3c2410_defconfig .config

(2).配置和裁剪内核功能

make menuconfig

在默认配置基础上做如下配置(内核配置选项多,选重要的说明)

System Type --->

S3C2410 Machines --->

[*] SMDK2410/A9M2410 # 该项一定要选(参看该项的 HELP)

[ ] IPAQ H1940 # 其余全部不选

[ ] Acer N30

[ ] Simtec Electronics BAST (EB2410ITX)

[ ] NexVision OTOM Board

[ ] AML M5900 Series

[ ] Thorcom VR1000

[ ] QT2410

S3C2412 Machines ---> # 清除菜单下的所有子项

S3C2440 Machines --->

[ ] Simtec Electronics ANUBIS

[ ] Simtec IM2440D20 (OSIRIS) module

[ ] HP iPAQ rx3715

[*] SMDK2440 # 选中

[ ] NexVision NEXCODER 2440 Light Board

[*] SMDK2440 with S3C2440 CPU module # 选中

S3C2442 Machines ---> # 清除菜单下所有子项

S3C2443 Machines ---> # 清除菜单下所有子项

[*] Support ARM920T processor

Boot options --->

# 设置第三项启动参数(Defalt kernel command string)内容如下:

noinitrd root=/dev/mtdblock2 rootfstype=jffs2 console=ttySAC0,115200

init=linuxrc mem=64m

Device Drivers --->

<*> Memory Technology Device (MTD) support ---> # NAND Flash 支持

[*] Network device support ---> # 网卡支持

[*] Ethernet (10 or 100Mbit) --->

<*> DM9000 support

File systems ---> # 文件系统

< > Second extended fs support

< > Ext3 journalling file system support

... ...

<*> Kernel automounter support # 选中

Pseudo filesystems --->

[*] Virtual memory file system support (former shm fs) # tmpfs 支持

Miscellaneous filesystems --->

<*> Journalling Flash File System v2 (JFFS2) support # JFFS2

(0) JFFS2 debugging verbosity (0 = quiet, 2 = noisy)

[*] JFFS2 write-buffering support

[ ] Verify JFFS2 write-buffer reads (NEW)

[ ] JFFS2 summary support (EXPERIMENTAL)

[ ] JFFS2 XATTR support (EXPERIMENTAL)

[*] Advanced compression options for JFFS2 # 压缩方式全选

[*] JFFS2 ZLIB compression support

[*] JFFS2 LZO compression support

[*] JFFS2 RTIME compression support

[*] JFFS2 RUBIN compression support

[*] Network File Systems (NEW) --->

(3) 配置完成后保存配置,然后编译内核映像 zImage

make zImage

(4) 编译驱动模块

make modules

(5) 安装模块

make modules_install

(6).生成 U-Boot 格式的镜像

./mkimage -A arm -O linux -T kernel -C none -a 30008000 -e 30008000 -n

'linux-2.6.24' -d arch/arm/boot/zImage uImage.bin

生成 uImage.bin 文件。需要这一步的原因是 U-Boot 只能引导使用 mkimage

处理过的内核。内核启动参数是由 U-Boot 提供的(只要 U-Boot 定义过该参数),

内核配置选项中的 Defalt kernel command string 不影响。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: