免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 960 | 回复: 0
打印 上一主题 下一主题

移植Linux2.6.22.2到博创2410-S(s3c2410A) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-09-30 17:13 |只看该作者 |倒序浏览

一、将Linux2.6.22.2内核源码放到工作目录的kernel文件夹下,并解压。
#tar xzvf linux2.6.22.2.tar.gz
#pwd
/home/tekkaman/working/kernel
# cd linux2.6.22.2
进入内核解压后的目录,以后示例中,只要是相对路径全部是相对于
/home/tekkaman/working/kernel/linux2.6.22.2/此目录
二、修改内核源码根目录下的Makefile文件(CROSS_COMPILE    =的值因个人情况而定,其他可以照做。)
#vi Makefile
......
#SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \
#                  -e s/arm.*/arm/ -e s/sa110/arm/ \
#                  -e s/s390x/s390/ -e s/parisc64/parisc/ \
#                  -e s/ppc.*/powerpc/ -e s/mips.*/mips/ )
......
#ARCH        ?= $(SUBARCH)
#CROSS_COMPILE    ?=
ARCH        = arm
CROSS_COMPILE    = /home/tekkaman/working/crosstool-gcc410-k26222/gcc-4.1.0-glibc-2.3.2/arm-9tdmi-linux-gnu/bin/arm-9tdmi-linux-gnu-

三、修改arch/arm/plat-s3c24xx/common-smdk.c文件,修改Nand Flash的分区信息和Nand Flash的硬件信息。
(LED 器件的初始化也在这个文件里,但是博创的平台没有那四个LED管,所以要不要那些程序都无所谓。我就把它们放在那里,反正启动时不会有影响,也没有出错信息。)
注意:请不要画蛇添足地在进行自定义nand flash分区时仍然按照以前内核的移植步骤,在devs.c中自己添加分区信息,不然系统启动时会有出错信息:
kobject_add failed for s3c2410-nand with -EEXIST, don't try to register things with the same name in the same directory.
[] (dump_stack+0x0/0x14) from [] (kobject_shadow_add+0x160/0x1a8)
[] (kobject_shadow_add+0x0/0x1a8) from [] (kobject_add+0x14/0x18)
[] (kobject_add+0x0/0x18) from [] (device_add+0xa0/0x568)
[] (device_add+0x0/0x568) from [] (platform_device_add+0x100/0x150)
[] (platform_device_add+0x0/0x150) from [] (platform_device_register+0x20/0x24)
r7:c0022a10 r6:c0020a1c r5:00000000 r4:c02cab30
[] (platform_device_register+0x0/0x24) from [] (platform_add_devices+0x24/0x6c)
r4:00000000
[] (platform_add_devices+0x0/0x6c) from [] (smdk_machine_init+0x84/0x98)
r8:c03b8000 r7:00000000 r6:c0020a1c r5:00000000 r4:c0021404
[] (smdk_machine_init+0x0/0x98) from [] (smdk2410_init+0x1c/0x24)
[] (smdk2410_init+0x0/0x24) from [] (customize_machine+0x20/0x2c)
[] (customize_machine+0x0/0x2c) from [] (kernel_init+0xb8/0x284)
[] (kernel_init+0x0/0x284) from [] (do_exit+0x0/0x76c)

我一开始就犯了这个毛病。具体情况请参阅:
http://blog.chinaunix.net/u/17218/showart_262438.html
以及/arch/arm/plat-s3c24xx文件夹下的common-smdk.c和devs.c。
......
/* NAND parititon from 2.4.18-swl5 */
static struct mtd_partition smdk_default_nand_part[] = {
[0] = {
  .name = "U-Boot-1.2.0",
  .size  = SZ_128K,
  .offset = 0,
},
[1] = {
  .name = "U-Boot-1.2.0 Parameter",
  .offset = SZ_128K,
  .size = SZ_64K,
},
[2] = {
  .name = "Linux2.6.22.2 Kernel",
  .offset = SZ_128K+SZ_64K,
  .size = SZ_4M+(SZ_1M-SZ_128K-SZ_64K),
},
[3] = {
  .name = "Root-JFFS2",
  .offset = SZ_1M * 5,
  .size = SZ_1M * 5,
},
[4] = {
  .name = "Boot-Root(cramfs)",
  .offset = SZ_1M * 10,
  .size = SZ_1M * 10,
},
[5] = {
  .name = "YAFFS",
  .offset = SZ_1M * 20,
  .size = SZ_1M * 44,
}
/*,
[6] = {
  .name = "S3C2410 flash partition 6",
  .offset = SZ_1M * 24,
  .size = SZ_1M * 24,
},
[7] = {
  .name = "S3C2410 flash partition 7",
  .offset = SZ_1M * 48,
  .size = SZ_16M,
}
*/
};
......
static struct s3c2410_platform_nand smdk_nand_info = {
    .tacls        = 0,
    .twrph0        = 30,
    .twrph1        = 0,
    .nr_sets    = ARRAY_SIZE(smdk_nand_sets),
    .sets        = smdk_nand_sets,
};
......
四、 修改drivers/mtd/nand/s3c2410.c,去掉nand flash 的ECC。
  我的内核是通过U-BOOT写到Nand Flash的, U-BOOT 通过的软件ECC算法产生ECC校验码, 这与内核校验的ECC码不一样, 内核中的ECC码是由S3C2410中Nand Flash控制器产生的。所以,我在这里选择禁止内核ECC校验。
(不过我不了解内核中的ECC码生成原理,在查资料的过程中我看到了《成功移植最新的2.6.22.3的linux kernel到S3C2410上》,链接是
http://www.cnitblog.com/zouzheng/archive/2007/08/28/32545.html

http://hi.baidu.com/wangy0919/blog/item/0058652ae8c3133b5343c1cf.html
,都是转载的,但都没找到原作者是谁。其中有这样一段活:
“第三步:修改ECC校验:
根据kernel官方网站上的说明,从2.6.22.3已经修改了ECC校验的问题(这也是我移植2.6.22.3的一个重要原因)。但实验下来发现,不管是用软件ECC还是硬件ECC都不行。只好改成NAND_ECC_NONE:
在driver/mtd/nand/s3c2410.c中找到s3c2410_nand_init_chip()函数,将其中的
chip->ecc.mode=NAND_ECC_SOFT;
改成
chip->ecc.mode=NAND_ECC_NONE; ”


后来我就到网上找关于2.6.22.3的ECC校验的资料,始终没找到上面所说的修改,那位高人看到了通知一声。看来要好好看看这方面的内容了。)
    搜索关键字NAND_ECC_SOFT,在s3c2410_nand_init_chip函数里,修改NAND_ECC_SOFT为NAND_ECC_NONE
五、增加Yaffs2文件系统的支持
  对于YAFFS文件系统,我在移植时查阅了许多资料。有的博客上说没有必要移植YAFFS2,因为它是为每页大于1024B的NAND Flash设计的。即使移植了YAFFS2,如果你的NAND Flash是每页512+16B的那系统也会自动挂载YAFFS。所以在这里要移植YAFFS2或是YAFFS 随你的便。我移植的是YAFFS2。
1、下载Yaffs2
      
URL:http://www.aleph1.co.uk/cgi-bin/viewcvs.cgi/
2、解压Yaffs2并将其加入Linux内核(打补丁的方式)
       #cd yaffs2
       #./patch-ker.sh c /home/tekkaman/working/kernel/linux-2.6.22.2/
.......

七、配置内核
   在配置内核前,先拷贝s3c2410开发板的默认配置到内核根目录下,以简化配置过程。
    #pwd
    /home/tekkaman/working/kernel/linux-2.6.22.2
    # cp arch/arm/configs/s3c2410_defconfig .config
    # make menuconfig
    以下是在 s3c2410_defconfig 基础上要配置的选项(有一些必须的选项在s3c2410_defconfig里已经选上了,所以我没有写出来。以下的选项非特别说明,可能不用选,我没有做实验证明哪些要、哪些不要,所以有兴趣的可以自己做实验看看,欢迎发E-Mail告诉我结果。谢谢)
General setup  --->  
   
  • Configure standard kernel features (for small systems)  --->   
        选上这项,否则文件系统中的一些选项不会出现

    System Type  --->      
       S3C2410 Machines  --->   
       
  • SMDK2410/A9M2410    留下这项就够了,其他全部“N”掉
       “N”掉 S3C2412 Machines  ---> 、 S3C2440 Machines  ---> 和 S3C2443 Machines  ---> 里的所有选项,都是和2410无关的选项。
    Boot options  --->
         将 (root=/dev/hda1 ro init=/bin/bash console=ttySAC0) Default kernel command string
    改成   (noinitrd root=/dev/mtdblock4  rootfstype=cramfs  console=ttySAC0,115200 init=/linuxrc mem=64M) Default kernel command string
    #说明:
    #mtdblock4代表第5个flash分区,用来作根文件系统rootfs;
    # console=ttySAC0,115200使kernel启动期间的信息全部输出到串口0上,波特率为115200;
    # 2.6内核对于串口的命名改为ttySAC0,但这不影响用户空间的串口编程。
    # 用户空间的串口编程针对的仍是/dev/ttyS0等
    # mem=64M表示内存是64M,如果是32则设为32M
        在实践中,我发现“rootfstype=cramfs”这句还是挺重要的。如果没有这句,系统启动时即使分区挂载正确了,但是文件系统的类型有可能出错。在这里定义过,就不会出错了。这里的选项也和根文件系统的配置有关。(我先使用cramfs做跟文件系统,以后再换JFFS2或是YAFFS)

    Userspace binary formats  --->
         Kernel support for a.out and ECOFF binaries (去除该选项,a.out和ECOFF是两种可执行文件的格式,在ARM-Linux下一般都用ELF,所以这两种基本用不上。)
    Networking  --->
    Networking options  --->   
         Packet socket
       
  •    Packet socket: mmapped IO
    -我移植 斯达康 的XI-735 无限网卡,所以我选了WLAN(802.11)的选项,不需的可以不选-
         Wireless  --->
            --- Improved wireless configuration API
            --- Wireless extensions
             Generic IEEE 802.11 Networking Stack (mac80211)
          
  •    Enable LED triggers
           [ ]   Enable debugging output (NEW)
            Generic IEEE 802.11 Networking Stack  
           [ ]   Enable full debugging output (NEW)
            ---   IEEE 802.11 WEP encryption (802.1x)
              IEEE 802.11i CCMP support (NEW)  
              IEEE 802.11i TKIP encryption (NEW)  
              Software MAC add-on to the IEEE 802.11 networking stack
           [ ]     Enable full debugging output (NEW)
    Device Drivers  --->   
             “N”掉   Parallel port support  ---> 里的所有选项。
           Plug and Play support  --->里的所有选项一定要“N”掉,不然编译会出错!!!!!!!!
       Network device support  --->
            Ethernet (10 or 100Mbit)  --->
            “N”掉 DM9000 support和   Generic Media Independent Interface device support
    -------以下一定要选上,是AX88796的驱动------
                
  • Other ISA cards      
                 NE2000/NE1000 support
    -----------------------------
            “N”掉 [ ]   Ethernet (1000 Mbit)  --->和 [ ]   Ethernet (10000 Mbit)  --->
            Wireless LAN  --->  
                
  • Wireless LAN (pre-802.11)
                     
  • Wireless LAN (IEEE 802.11)
            USB Network Adapters  --->
                 Multi-purpose USB Networking Framework
         MMC/SD card support  --->
        Real Time Clock  --->
            “N”掉 [ ]   Set system time from RTC on startup and resume

    #接下来做的是针对文件系统的设置,我实验时目标箱上要挂的根文件系统是cramfs,故做如下配置
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    (注意:不要试图按照旧内核的方法增加 devfs 的支持,因为在这个内核里已经彻底删除了
    devfs的源代码。我曾试图将旧内核的devfs源代码复制过来,不过编译会出错!
       补救的办法就是用BusyBox的mdev来代替,在讲根文件系统的建立时我会说明,你也可以到网上找mdev的资料。)
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

    File systems -->
         Second extended fs support #去除对ext2的支持
         Ext3 journalling file system support #去除对ext3的支持
         Kernel automounter support
         Kernel automounter version 4 support (also supports v3)
         Filesystem in Userspace support
        Pseudo filesystems -->
          
  • Virtual memory file system support (former shm fs)
            Userspace-driven configuration filesystem (EXPERIMENTAL)
          Miscellaneous filesystems -->
            YAFFS2 file system support
           “N”掉[ ]Autoselect yaffs2 format 和
    [ ]Cache short names in RAM ,因为这是给每页大于1024B的NAND Flash设计的
    Journalling Flash File System v2 (JFFS2) support
        (0)   JFFS2 debugging verbosity (0 = quiet, 2 = noisy)
       
  •    JFFS2 write-buffering support
        [ ]   JFFS2 summary support (EXPERIMENTAL)
        [ ]   JFFS2 XATTR support (EXPERIMENTAL)
       
  •    Advanced compression options for JFFS2
       
  •      JFFS2 ZLIB compression support
       
  •      JFFS2 RTIME compression support
       
  •      JFFS2 RUBIN compression support
        JFFS2 default compression mode (priority)  --->
    Network File Systems -->
                NFS file system support
    --以下最好选上,因为在挂载NFS时可能出现protocol不支持的情况--
               
  • Provide NFSv3 client support
               
  • Provide client support for the NFSv3 ACL protocol extension
               
  •    Provide NFSv4 client support (EXPERIMENTAL)
               
  •    Allow direct I/O on NFS files
    -------------------------------------------------------------------------  
          NFS server support  
          
  •    Provide NFSv3 server support
          
  • Provide server support for the NFSv3 ACL protocol extension     
          
  •      Provide NFSv4 server support (EXPERIMENTAL)         
           ---   Provide NFS server over TCP support                  
          
  • Root file system on NFS

        保存退出,产生.config文件。  


    本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/104304/showart_2063167.html
  • 您需要登录后才可以回帖 登录 | 注册

    本版积分规则 发表回复

      

    北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
    未成年举报专区
    中国互联网协会会员  联系我们:huangweiwei@itpub.net
    感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

    清除 Cookies - ChinaUnix - Archiver - WAP - TOP