免费注册 查看新帖 |

Chinaunix

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

移植Linux-2.6.30.4到mini2440 [复制链接]

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

                                                                                                                                                                                                                                                                                一、安装交叉编译器1)交叉编译器使用codesourcery提供的符合EABI标准的arm-linux-gcc-4.3.3交叉编译器,下载地址:
http://www.codesourcery.com/sgpp/lite/arm/portal/package4571/public/arm-none-linux-gnueabi/arm-2009q1-203-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
2)下载后,解压到/opt/目录:# tar jxvf arm-2009q1-203-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 -C /opt/3)因为/opt/arm-2009q1/bin/目录中的可执行文件均以不常用的" arm-none-linux-gnueabi- "开头,做几个arm-linux-xxx软链接以方便日后使用:
               
               
               
                ln -s arm-none-linux-gnueabi-gdbtui    arm-linux-gdbtui
ln -s arm-none-linux-gnueabi-addr2line arm-linux-addr2line
ln -s arm-none-linux-gnueabi-gprof    arm-linux-gprof
ln -s arm-none-linux-gnueabi-ar       arm-linux-ar
ln -s arm-none-linux-gnueabi-as       arm-linux-as
ln -s arm-none-linux-gnueabi-nm       arm-linux-nm
ln -s arm-none-linux-gnueabi-ld       arm-linux-ld
ln -s arm-none-linux-gnueabi-c++      arm-linux-c++
ln -s arm-none-linux-gnueabi-objcopy  arm-linux-objcopy
ln -s arm-none-linux-gnueabi-c++filt  arm-linux-c++filt
ln -s arm-none-linux-gnueabi-cpp      arm-linux-cpp
ln -s arm-none-linux-gnueabi-ranlib   arm-linux-ranlib
ln -s arm-none-linux-gnueabi-objdump  arm-linux-objdump
ln -s arm-none-linux-gnueabi-readelf  arm-linux-readelf
ln -s arm-none-linux-gnueabi-size     arm-linux-size
ln -s arm-none-linux-gnueabi-gcov     arm-linux-gcov
ln -s arm-none-linux-gnueabi-strings  arm-linux-strings
ln -s arm-none-linux-gnueabi-gdb      arm-linux-gdb
ln -s arm-none-linux-gnueabi-strip    arm-linux-strip
ln -s arm-none-linux-gnueabi-sprite   arm-linux-sprite
4)同时在/opt/arm-2009q1/bin/目录建立如下三个脚本:
脚本arm-linux-g++的内容:
               
               
               
                #!/bin/sh
arm-none-linux-gnueabi-g++ -march=armv4t $*
脚本arm-linux-gcc的内容:
#!/bin/sh
arm-none-linux-gnueabi-gcc -march=armv4t $*
脚本arm-linux-gcc-4.3.3的内容:
#!/bin/sh
arm-none-linux-gnueabi-gcc-4.3.3 -march=armv4t $*
5)为以上三个脚本加上可执行属性:
# chmod +x arm-linux-g++# chmod +x arm-linux-gcc# chmod +x arm-linux-gcc-4.3.36)输出交叉编译器的可执行文件的路径到PATH环境变量:
# export PATH=/opt/arm-2009q1/bin:$PATH
以后要用到arm-linux-gcc-4.3.3交叉编译器时都应该先在终端上执行上面一句!7)查看是否安装成功:# arm-linux-gcc -v如果成功的话,可以看到如下信息:
               
                Using built-in specs.
Target: arm-none-linux-gnueabi
Configured with: /scratch/mitchell/builds/4.3-arm-none-linux-gnueabi-respin/src/gcc-4.3/configure --build=i686-pc-linux-gnu --host=i686-pc-linux-gnu --target=arm-none-linux-gnueabi --enable-threads --disable-libmudflap --disable-libssp --disable-libstdcxx-pch --with-gnu-as --with-gnu-ld --with-specs='%{funwind-tables|fno-unwind-tables|mabi=*|ffreestanding|nostdlib:;:-funwind-tables}' --enable-languages=c,c++ --enable-shared --enable-symvers=gnu --enable-__cxa_atexit --with-pkgversion='Sourcery G++ Lite 2009q1-203' --with-bugurl=https://support.codesourcery.com/GNUToolchain/ --disable-nls --prefix=/opt/codesourcery --with-sysroot=/opt/codesourcery/arm-none-linux-gnueabi/libc --with-build-sysroot=/scratch/mitchell/builds/4.3-arm-none-linux-gnueabi-respin/lite/install/arm-none-linux-gnueabi/libc --with-gmp=/scratch/mitchell/builds/4.3-arm-none-linux-gnueabi-respin/lite/obj/host-libs-2009q1-203-arm-none-linux-gnueabi-i686-pc-linux-gnu/usr --with-mpfr=/scratch/mitchell/builds/4.3-arm-none-linux-gnueabi-respin/lite/obj/host-libs-2009q1-203-arm-none-linux-gnueabi-i686-pc-linux-gnu/usr --disable-libgomp --enable-poison-system-directories --with-build-time-tools=/scratch/mitchell/builds/4.3-arm-none-linux-gnueabi-respin/lite/install/arm-none-linux-gnueabi/bin --with-build-time-tools=/scratch/mitchell/builds/4.3-arm-none-linux-gnueabi-respin/lite/install/arm-none-linux-gnueabi/bin
Thread model: posix
gcc version 4.3.3 (Sourcery G++ Lite 2009q1-203)
二、准备源码包1)Linux 2.6.30.4的下载地址:
http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.30.4.tar.bz2
2)yaffs2文件系统的下载地址:
http://www.aleph1.co.uk/cgi-bin/viewcvs.cgi/
点击Download GNU tarball,下载cvs-root.tar.gz
请把linux-2.6.30.4.tar.bz2和cvs-root.tar.gz放在同一目录内!三、移植内核1)解压内核源码包# tar jxvf linux-2.6.30.4.tar.bz22)进入内核目录# cd linux-2.6.30.43)修改顶层Makefile# gedit Makefile在193行ARCH                      ?= $(SUBARCH)CROSS_COMPILE    ?=修改为ARCH                      ?= armCROSS_COMPILE    ?= /opt/arm-2009q1/bin/arm-linux-4)修改机器码# gedit arch/arm/tools/mach-types在379行s3c2440            ARCH_S3C2440        S3C2440            362修改为s3c2440            ARCH_S3C2440        S3C2440            782与supervivi传入的机器码参数一致即可!5)修改时钟频率# gedit arch/arm/mach-s3c2440/mach-smdk2440.c在160行
               
               
               
               
               
                static void __init smdk2440_map_io(void)
{
    s3c24xx_init_io(smdk2440_iodesc, ARRAY_SIZE(smdk2440_iodesc));
    //s3c24xx_init_clocks(16934400); //注释这句,加入下一句
    s3c24xx_init_clocks(12000000);
    s3c24xx_init_uarts(smdk2440_uartcfgs, ARRAY_SIZE(smdk2440_uartcfgs));
}
6)修改Nand Flash分区# gedit arch/arm/plat-s3c24xx/common-smdk.c在109行
               
                static struct mtd_partition smdk_default_nand_part[] = {
    [0] = {
        .name = "supervivi",
        .size = 0x00030000,
        .offset = 0,
    },
    [1] = {
        .name = "Kernel",
        .offset = 0x00050000,
        .size = 0x00200000,
    },
    [2] = {
        .name = "root",
        .offset = 0x00250000,
        .size = 0x03dac000,
    }
};
四、配置内核# cp arch/arm/configs/s3c2410_defconfig .config# make menuconfig系统类型只选以下三项:
System Type ---> S3C2410 Machines --->
  • SMDK2410/A9M2410
                     S3C2440 Machines --->
  • SMDK2440
                                           
  • SMDK2440 with S3C2440 CPU module
    内核特性加上以下两项:
    Kernel Features --->
  • Use the ARM EABI to compile the kernel
                         
  • Allow old ABI binaries to run with this(EXPERIMENTA) kernel
    如果你想了解每个配置选项的意义,请点击:
    [color="#2a5200"]Linux 2.6.19.x 内核编译配置选项简介

    五、编译内核# make zImage
    六、下载、烧写内核镜像先使用友善之臂公司提供的yaffs2根文件系统镜像做测试,可以运行到这里:
                   
                    FAT: unable to read boot sector                                                
    VFS: Cannot open root device "mtdblock2" or unknown-block(31,2)                 
    Please append a correct "root=" boot option; here are the available partitions:
    1f00             192 mtdblock0 (driver?)                                       
    1f01            2048 mtdblock1 (driver?)                                       
    1f02           63152 mtdblock2 (driver?)                                       
    Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(31,2)
    [c002c700>] (unwind_backtrace+0x0/0xdc) from [c02a7d2c>] (panic+0x40/0x110)   
    [c02a7d2c>] (panic+0x40/0x110) from [c0008fcc>] (mount_block_root+0x1d0/0x210)
    [c0008fcc>] (mount_block_root+0x1d0/0x210) from [c0009264>] (prepare_namespac)
    [c0009264>] (prepare_namespace+0x164/0x1bc) from [c0008598>] (kernel_init+0xb)
    [c0008598>] (kernel_init+0xb4/0xe0) from [c004812c>] (do_exit+0x0/0x578)      
    [c004812c>] (do_exit+0x0/0x578) from [00000001>] (0x1)  
    七、加入对yaffs2文件系统的支持1)回到上级目录# cd ..
    2)解压yaffs2文件系统源码包# tar zxvf cvs-root.tar.gz
    3)进入yaffs2源码目录# cd cvs/yaffs2
    4)打补丁# ./patch-ker.sh c ../../linux-2.6.30.4Updating ../../linux-2.6.30.4/fs/KconfigUpdating ../../linux-2.6.30.4/fs/Makefile5)回到内核目录# cd ../../linux-2.6.30.46)重新配置# make menuconfig选上以下一项:
    File systems --->
  • Miscellaneous filesystems ---> *> YAFFS2 file system support
    7)重新编译内核# make zImage
    八、重新下载、烧写内核镜像
    yaffs: dev is 32505858 name is "mtdblock2"                                    
    yaffs: passed flags ""                                                         
    yaffs: Attempting MTD mount on 31.2, "mtdblock2"                              
    yaffs_read_super: isCheckpointed 0                                             
    VFS: Mounted root (yaffs filesystem) on device 31:2.                           
    Freeing init memory: 120K                                                      
    mount: mounting /dev/sda2 on /opt failed: No such file or directory            
    mkdir: cannot create directory '/udisk': File exists                           
    mount: mounting /dev/sda1 on /udisk failed: No such file or directory         
                                                                                  
    Please press Enter to activate this console.                                   
    [root@jjx /]#
    成功进入控制台,内核算是移植成功了~~

    [color="#2a5200"]移植LCD驱动与加入背光、RTC for mini2440 & Linux2.6.30.4

    [color="#2a5200"]加入友善的触摸屏驱动 for mini2440 & Linux2.6.30.4



    [color="#2a5200"]移植DM9000驱动 for mini2440 & Linux2.6.30.4

    [color="#2a5200"]移植SD卡驱动 for mini2440 & Linux2.6.30.4

    [color="#2a5200"]配置USB for mini2440 & Linux2.6.30.4

                   
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   

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

    本版积分规则 发表回复

      

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

    清除 Cookies - ChinaUnix - Archiver - WAP - TOP