第 4 章 嵌入式 LINUX 内核移植
4.3 内核移植
4.3.1 内核配置
4.3.1.3 配置内核选项
struct nand_chip *chip = &nmtd->chip;
chip->IO_ADDR_R = (char *)info->regs + S3C2410_NFDATA;
chip->IO_ADDR_W = (char *)info->regs + S3C2410_NFDATA;
chip->hwcontrol = s3c2410_nand_hwcontrol;
chip->dev_ready = s3c2410_nand_devready;
chip->cmdfunc = s3c2410_nand_command;
chip->write_buf = s3c2410_nand_write_buf;
chip->read_buf = s3c2410_nand_read_buf;
chip->select_chip = s3c2410_nand_select_chip;
chip->chip_delay = 50;
chip->priv = nmtd;
chip->options = 0;
chip->controller = &info->controller;
nmtd->info = info;
nmtd->mtd.priv = chip;
nmtd->set = set;
if (hardware_ecc) {
chip->correct_data = s3c2410_nand_correct_data;
chip->enable_hwecc = s3c2410_nand_enable_hwecc;
chip->calculate_ecc = s3c2410_nand_calculate_ecc;
chip->eccmode = NAND_ECC_HW3_512;
chip->autooob = &nand_hw_eccoob;
} else {
chip->eccmode = NAND_ECC_NONE; //修改此行的赋值 }
}
… …
到此已经完成了新的内核对 NAND Flash 分区的支持,下面将介绍配置内核的主要选 项。
4.3.1.3 配置内核选项
配置内核选项是移植内核过程中很重要的一步,也是非常复杂的一步,配置时一定要细 心。由于我们的开发板很接近 Linux 内核中提供的 smdk2410 开发板,所以可以参考 smdk2410 开发板的配置文件,将其默认的配置文件拷贝到内核代码的根目录下,然后开始配置内核,
操作如下:
# cd linux-2.6.10
# cp arch/arm/configs/smdk2410_defconfig .config
# make menuconfig
l Misc devices --->
Loadable module support --->
[*] Enable loadable module support # 该选项的目的是使内核支持可加载模块,使用 modprobe, lsmod, modinfo, insmod, rmmod 等工具需要,所以必须选择。
[*] Module unloading # 卸载模块选项,这里选择该选项。
接着加入内核对 S3C2410 DMA(Direct Memory Access,直接内存访问)的支持,具体 配置选项如下:
System Type -->
[*] S3C2410 DMA support # 该选项来支持S3C2410 DMA特性。
然后在General setup ---> Default kernel command string 菜单下修改默认的内核启动参 数,修改后内容如下:
noinitrd root=/dev/mtdblock2 init=/linuxrc console= ttySAC0,115200 mem=64M 对上面的参数解释一下,mtdblock2代表使用第3个flash分区(也就是我们建立的rootfs 分区),用来作根文件系统;console=ttySAC0,115200使kernel启动期间的信息全部输出到串 口0上,波特率为115200;Linux 2.6内核对于串口的命名改为ttySAC0,在2.4内核中,串口 名为ttyS0,使用时请注意。mem=64M表示内存大小是64M。
同时还需要添加对浮点算法的支持,在菜单下选择:
General setup --->
[*] NWFPE math emulation #支持NWFPE浮点库,在许多情况下要使用,所以最好 选上。
接下来做对MTD设备(如flash, ram等芯片)的配置,如下选择配置:
Memory Technology Devices (MTD) -->
[*] MTD partitioning support RAM/ROM/Flash chip drivers -->
[*] Detect flash chips by Common Flash Interface (CFI) probe
[*] Detect nonCFI AMD/JEDECcompatible flash chips [*] Support for Intel/Sharp flash chips
[*] Support for AMD/Fujitsu flash chips [*] Support for ROM chips in bus mapping NAND Flash Device Drivers -->
[*] NAND Device Support
[*] NAND Flash support for S3C2410/S3C2440 SoC
为了我们要移植的内核支持devfs(Device Filesystem,设备文件系统),以及在启动时 能自动加载/dev为devfs。需要针对文件系统的设置,由于我们目标板上要用的文件系统是 cramfs,所以需要做如下配置:
File systems -->
[ ]Second extended fs support #去除对ext2的支持 Pseudo filesystems -->
[*] /proc file system support
[*] Virtual memory file system support (former shm fs) [*] /dev file system support (OBSOLETE)
[*] automatically mount at boot (NEW) Miscellaneous filesystems -->
[*]Compressed ROM file system support (cramfs) Network File Systems >
[*] NFS file system support
除此之外,还需要配置以下选项来支持S3C2410 RTC、USB和MMC/SD卡驱动,具体选 项如下:
Character devices -->
[*] Nonstandard serial port support [*] S3C2410 RTC Driver
USB Support -->
[*] Support for Host-side USB MMC/SD Card Support -->
[*] MMC Support
[*] MMC block device driver
以上完成了所有内核相关的基本配置,然后选择保存,默认会保存到.config文件。保存 结束显示如图4.2所示,下一步就可以进行编译内核了。
图4.2 内核配置保存