移植linux2.6.19成功^_^

本文详细介绍了如何将 Linux 2.6.19 内核移植到 S3C2410 开发板的过程,包括修改 Makefile 设置交叉编译器、配置 NAND Flash 分区、禁用 ECC 校验等关键步骤。

前几天把VIVIU-BOOT移植成功后,就进入了主要的学习环节,LINUX的移植,从www.kernel.org下载 2.6.19 .tar.bz2,解压:
#tar jxvf 2.6.19.tar.bz2

 

1、修改内核顶层目录的Makefile,找到ARCHCROSS_COMPILE的地方,修改为
    ARCH                    ?= arm
    CROSS_COMPILE    ?= arm-linux-
   
保存。必须使用3.2以上的编译器,我使用的是 3.4.1

 

2    修改arch/arm/mach-s 3c 2410/common-smdk.c
   
设置Nand Flash的分区和信息,下面是我的分区结构:

 

    static struct mtd_partition smdk_default_nand_part[] = {
    [0] = {
        .name    = "bootloader",
        .size    = SZ_ 1M ,
        .offset    = 0,
    },
    [1] = {
        .name    = "kernel",
        .offset = SZ_ 1M ,
        .size    = SZ_ 2M ,
    },
    [2] = {
        .name    = "root",
        .offset = SZ_ 1M *3,
        .size    = SZ_ 8M *5,
    },
    [3] = {
        .name    = "user",
        .offset    = SZ_ 1M *43,
        .size    = SZ_ 1M *21,
    },
};
   
static struct s 3c 2410_platform_nand smdk_nand_info = {
    .tacls        = 0,
    .twrph0        = 30,
    .twrph1        = 0,
    .nr_sets    = ARRAY_SIZE(smdk_nand_sets),
    .sets        = smdk_nand_sets,
};

说明:如果bootloaderVIVI的话,必须和VIVI里面的分区设置一致,可以启动VIVI,用part show命令查看,并且 2.6.19 的设置分区与其他版本如2.6.142.6.11有点区别,其他版本是修改
  arch/arm/mach-s 3c 2410/devs.c
arch/arm/mach-s 3c 2410/mach-smdk2410.

 

3、指定启动时初始化

kernel启动时依据我们对分区的设置进行初始配置

修改arch/arm/mach-s3c2410/mach_smdk2410.c文件

修改smdk2410_devices[].指明初始化时包括我们在前面所设置的flash分区信息

static struct platform_device *smdk2410_devices[] __initdata = {

&s 3c _device_usb,

&s 3c _device_lcd,

&s 3c _device_wdt,

&s 3c _device_i 2c ,

&s 3c _device_iis,

/* 添加如下语句即可 */

&s 3c _device_nand,

};

保存,退出。

在这里不仅仅是NAND FLASH,其他新增加设备的移植和初始化方法也是如此!!!

我用的是 2.6.19 的内核,在这里我实验了几次,发现我添加了这句之后启动信息里面会出现下面的错误

S3C2410: Initialising architecture

kobject_add failed for s3c2410-nand with -EEXIST, don't try to register things with the same name in the same directory.

s3c24xx: failed to add board device s3c2410-nand (-17) @c024f38c

当我去掉这句之后就没有这样的错误了,可能是因为 2.6.10 以后的版本不用再添加这样的信息吧!可以参考网络上的一篇文章《Linux 2.6.10 以后版本对 S3C2410 的支持》

 

4、禁止Flash ECC校验
   
我使用的内核是通过u-boot写数据到Nand Flash, u-boot通过的软件ECC算法产生ECC校验码, 这与内核校验的ECC码不一样, 内核中的ECC码是由S 3C 2410Nand Flash控制器产生的. 所以, 我们在这里选择禁止内核ECC校验。   
   
修改drivers/mtd/nand/s 3c 2410.c 文件,找到s 3c 2410_nand_init_chip()函数,在该函数体最后加上一条语句
:
    chip->eccmode = NAND_ECC_NONE;
保存,退出。

 

52.6内核不支持DEVFS,而使用的是udev,网络上有一篇关于UDEV的文章写的很不错,《udev嵌入式上路经历》,可以看看!

我看了网上很多人说可以用下面的方法是其支持devfs,可以自己实验一下,我没有使用

 

支持启动时挂载devfs
   
为了我们的内核支持devfs以及在启动时并在/sbin/init运行之前能自动挂载/devdevfs文件系统,修改fs/Kconfig文件,找到

    menu "Pseudo filesystems"
添加如下语句:
config DEVFS_FS
    bool "/dev file system support (OBSOLETE)"
    default y
config DEVFS_MOUNT
    bool "Automatically mount at boot"
    default y
    depends on DEVFS_FS

 

6、使用SMDK板子的config配置内核
#cp arch/arm/configs/smdk2410_defconfig .config
#make menuconfig
smdk2410_defconfig的基础上,增加了下面选项:

 

Loadable module support -->
        [*] Enable loadable module support
        [*] Automatic kernel module loading
System Type -->
        [*] S 3C 2410 DMA support
Boot options -->
        Default kernel command string:
        noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0,115200 mem= 64M
            #
说明:mtdblock2代表第3NAND Flash分区,用来作根文件系统rootfs

            # console=ttySAC0,115200
使kernel启动期间的信息全部输出到串口0上,波特率为115200
            # 2.6
内核对于串口的命名改为ttySAC0,但这不影响用户空间的串口编程。但是看了很多网上的资料,也只有三星的S 3C 2410开发板才是ttySAC0,其他的仍然是ttyS0,我也没有实验过,因为我的开发板就是2410的!^_^

            # 用户空间的串口编程针对的仍是/dev/ttyS0
            # mem= 64M
表示内存是 64M ,如果是32则设为 32 M
Floating point emulation -->
        [*] NWFPE math emulation           
            #This is necessary to run most binaries!!!

#接下来要做的是对内核MTD子系统的设置
Device Drivers -->
        Memory Technology Devices (MTD) -->
                [*] MTD partitioning support
                    #
支持MTD分区,这样我们在前面设置的分区才有意义
                [*] Command line partition table parsing
                    #
支持从命令行设置flash分区信息,灵活
                RAM/ROM/Flash chip drivers -->

阅读(1478) | 评论(1) | 转发(0) |
0

上一篇:使U-BOOT能正确引导LINUX

下一篇:编译busybox

给主人留下些什么吧!~~

Kernel Honey2007-12-19 20:35:22

You're Special 你不一般 你怎样完成的? That's Incredible 简直难以置信

评论热议
Code maturity level options 代码成熟度选项 Prompt for development and/or incomplete code/drivers 显示尚在开发中或尚未完成的代码与驱动.除非你是测试人员或者开发者,否则请勿选择 General setup 常规设置 Local version - append to kernel release 在内核版本后面加上自定义的版本字符串(小于64字符),可以用"uname -a"命令看到 Automatically append version information to the version string 自动在版本字符串后面添加版本信息,编译时需要有perl以及git仓库支持 Support for paging of anonymous memory (swap) 使用交换分区或者交换文件来做为虚拟内存 System V IPC System V进程间通信(IPC)支持,许多程序需要这个功能.必选,除非你知道自己在做什么 IPC Namespaces IPC命名空间支持,不确定可以不选 POSIX Message Queues POSIX消息队列,这是POSIX IPC中的一部分 BSD Process Accounting 将进程的统计信息写入文件的用户级系统调用,主要包括进程的创建时间/创建者/内存占用等信息 BSD Process Accounting version 3 file format 使用新的第三版文件格式,可以包含每个进程的PID和其父进程的PID,但是不兼容老版本的文件格式 Export task/process statistics through netlink 通过netlink接口向用户空间导出任务/进程的统计信息,与BSD Process Accounting的不同之处在于这些统计信息在整个任务/进程生存期都是可用的 Enable per-task delay accounting 在统计信息中包含进程等候系统资源(cpu,IO同步,内存交换等)所花费的时间 UTS Namespaces UTS名字空间支持,不确定可以不选 Auditing support 审计支持,某些内核模块(例如SELinux)需要它,只有同时选择其子项才能对系统调用进行审计 Enable system-call auditing support 支持对系统调用的审计 Kernel .config support 把内核的配置信息编译进内核中,以后可以通过scripts/extract-ikconfig脚本来提取这些信息 Enable access to .config through /proc/config.gz 允许通过/proc/config.gz访问内核的配置信息 Cpuset support 只有含有大量CPU(大于16个)的SMP系统或NUMA(非一致内存访问)系统才需要它 Kernel->user space relay support (formerly relayfs) 页码,1/28 2009-12-25 file://C:\DOCUME~1\WENXIA~1\LOCALS~1\Temp\NOVDYLQW.htm
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值