• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 設計應用 > Linux2.6.36移植到飛凌S3C6410開發板 步驟

    Linux2.6.36移植到飛凌S3C6410開發板 步驟

    作者: 時間:2016-11-23 來源:網絡 收藏
    今天終于讓linux內核在飛凌ok6410的板子上跑起來了,想來也是艱辛,為了移植成功,斷斷續續做了將近兩個月的努力,期間郁悶不可言語形容啊, 了解其中艱辛,將自己移植步驟與心得與大家分享,希望對初踏次領域之人有所幫助,我所寫的成果一部分也是網上前輩的所作,并非本人原創。


    一、 移植環境
    主 機:VMWare-Ubuntu
    開發板:飛凌OK6410 nandflash,Kernel:2.6.36.2
    編譯器:arm-linux-gcc-4.3.2.tgz
    u-boot:u-boot-1.1.6

    注:編譯器和u-boot 都是飛凌開發板自帶的
    二、 源碼獲得
    內核源碼到http://www.all.kernel.org/下載;
    三、 移植步驟:
    1.將Linux2.6.34.2內核源碼放到工作目錄文件夾下,并解壓。
    #tar xzvf linux2.6.36.2.tar.gz –c /
    #pwd
    /
    # cd linux2.6.36.2
    2. 修改內核源碼根目錄下的Makefile文件(CROSS_COMPILE =的值因個人情況而定,其他可以照做,藍色部分為修改部分。)
    #gedit 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 = /usr/local/arm/usr/local/arm/4.3.2/bin/arm-none-linux- gnueabi-
    3添加NandFlash分區信息.
    修改arch/arm/mach-s3c64xx/mach-smdk6410.c文件,添加Nand Flash的分區信息和Nand Flash的硬件信息。(藍色字體為添加部分)
    #pwd
    #gedit mach-smdk6410.c //add here
    // 注意:此處的nandflash分區信息是飛凌自帶的2.6.28的內核設置,由于此處要用到uboot是飛凌的,所以分區信息也要按人家的來
    添加頭文件
    #include
    #include
    #include
    #include
    struct mtd_partition s3c_partition_info[] = {
    {
    .name = "Bootloader",
    .offset = 0,
    .size = (256*SZ_1K),
    .mask_flags =MTD_CAP_NANDFLASH,
    },
    {
    .name = "Kernel",
    .offset = (256*SZ_1K),
    .size = (4*SZ_1M) - (256*SZ_1K),
    .mask_flags = MTD_CAP_NANDFLASH,
    },
    #if defined (CONFIG_SPLIT_ROOT_FILESYSTEM)
    {
    .name = "Rootfs",
    .offset = (4*SZ_1M),
    .size = (80*SZ_1M),//
    },
    #endif
    {
    .name = "File System",
    .offset = MTDPART_OFS_APPEND,
    .size = MTDPART_SIZ_FULL,
    }
    };
    static struct s3c2410_nand_set s3c_nandset[]={
    [0]= {
    .name ="s3c24xx-nand",
    .nr_chips = 1,
    .nr_partitions =ARRAY_SIZE(s3c_partition_info),
    .partitions =s3c_partition_info,
    }
    };
    static struct s3c2410_platform_nand s3c_platform={
    .tacls =25,
    .twrph0 =55,
    .sets = &s3c_nandset,
    .nr_sets =ARRAY_SIZE(s3c_nandset),};
    //add here…
    static struct platform_device *smdk6410_devices[] __initdata = {
    #ifdef CONFIG_SMDK6410_SD_CH0
    &s3c_device_hsmmc0,
    #endif
    #ifdef CONFIG_SMDK6410_SD_CH1
    &s3c_device_hsmmc1,
    #endif
    &s3c_device_i2c0,
    &s3c_device_i2c1,
    &s3c_device_fb,
    &s3c_device_ohci,
    &s3c_device_usb_hsotg,
    &s3c64xx_device_iisv4,
    //add here
    &s3c_device_nand,
    //add here…
    }
    static void __init smdk6410_map_io(void){
    u32 tmp;
    //add here
    s3c_device_nand.name = "s3c6410-nand";
    //add here…

    }
    static void __init smdk6410_machine_init(void){
    u32 cs1;
    s3c_i2c0_set_platdata(NULL);
    s3c_i2c1_set_platdata(NULL);
    s3c_fb_set_platdata(&smdk6410_lcd_pdata);
    //add here
    s3c_nand_set_platdata(&s3c_platform);//
    //add here…
    }


    5.配置內核。(arch/arm/configs/目錄下是一般內核的默認配置)
    支持NandFlash
    Device Drivers --->
    <*> Memory Technology Device (MTD) support --->

    MTD partitioning support
    <*> NAND Device Support --->
    <*> NAND Flash support for S3C/S3C SoC
    再把這個選項選上
    device drivers ->
    Memory Technology Device (MTD) support --->
    Caching block device access to MTD devices
    (此出勾選可防止出現:VFS: Cannot open root device "mtdblock2" or unknown-block(2,0) 錯誤)
    保存退出
    復制config文件,編譯內核
    #pwd
    #/linux2.6.34.2
    #cp –f arch/arm/configs/s3c6400_defconfig .config
    可以使用make menuconfig對剛剛配置的內核根據具體的情況進行修改,開始我沒有進行修改直接make zImage,最后在arch/arm/boot/目錄下生成zImage鏡像文件。
    6.編譯內核 make zImage
    下載到板子上,發現如下問題,此問題郁悶我最久,
    …………………………………..
    CPU: Testing write buffer coherency: ok
    s3c6400-nand: failed to claim resource 0
    WARNING: at drivers/base/core.c:130 device_release+0x70/0x84()
    …………………………………………………….
    ------------[ cut here ]------------
    WARNING: at drivers/base/core.c:130 device_release+0x70/0x84()
    Device s3c64xx-rtc does not have a release() function, it is broken and must be fixed.
    Modules linked in:
    ……………………………………………………….

    [] (kernel_init+0x94/0x14c) from [] (kernel_thread_exit+0x0/0x8)
    ---[ end trace 1b75b31a2719ed1e ]---
    ------------[ cut here ]------------
    WARNING: at drivers/base/core.c:130 device_release+0x70/0x84()
    Device s3c64xx-pata.0 does not have a release() function, it is broken and must be fixed.
    Modules linked in:
    ……………………………………………………………………………..
    這個問題就是在mach-smdk6410.c 中的static struct platform_device *smdk6410_devices[] __initdata = {
    ……………………………………………….
    &smdk6410_smsc911x,
    &s3c_device_adc,
    &s3c_device_cfcon,
    &s3c_device_rtc,
    &s3c_device_ts,
    &s3c_device_wdt,
    &s3c_device_nand,
    }; 結構體中所有設備都找不到釋放函數,經過分析,可能是這些板級設備初始化時出現問題,所以系統調用釋放資源的函數,可是內核中沒有這些函數(可能是沒有必要吧,所以內核中沒有定義!此上純屬個人胡猜,希望高手指正),所以出現如上問題,通過我大量的分析,問題在static struct resource s3c_nand_resource[](路徑:arch./arm/plat-samsung) 這個機構體中,
    static struct resource s3c_nand_resource[] = {
    [0] = {
    .start = S3C_PA_NAND,
    .end = S3C_PA_NAND + SZ_1M-1,
    .flags = IORESOURCE_MEM,
    }
    };
    .end = S3C_PA_NAND + SZ_1M-1, 這個值后面再減去1,就可以了,這是對比其他的設備資源結構做出的修改,此處涉及到這些設備的總線地址范圍,我琢磨著出現上述問題,就是這個總線地址沖突了,希望高手指正啊!(內核中的定義,怎么會出現錯誤呢,這地方我還真搞不懂啊),不知道自己修改的合適不合適
    所以解決方法就是修改arch./arm/plat-samsung/dev-nand.c 中的
    static struct resource s3c_nand_resource[] = {
    [0] = {
    .start = S3C_PA_NAND,
    .end = S3C_PA_NAND + SZ_1M-1,
    .flags = IORESOURCE_MEM,
    }
    };
    .end = S3C_PA_NAND + SZ_1M-1, 減去一就行了
    7.再次編譯內核,下載運行:
    …………………………………
    ifconfig: socket: Function not implemented
    Try to bring eth0 interface up......ifconfig: socket: Function not implemented
    ifconfig: socket: Function not implemented
    ifconfig: socket: Function not implemented
    route: socket: Function not implemented
    Done

    Starting Qtopia, please waiting...
    Please press Enter to activate this console. touch...
    說明內核已經成功引導啟動文件系統,只不過現在的內核沒有觸摸板驅動,下一步你就可以移植一下觸摸板驅動了
    此教程只是本人所遇到問題的總結,一些問題只做參考,交流,并不具備通用性,如按照上述步驟遇到問題,聯系我,可以幫著一起解決,本人菜鳥,教程制作倉卒,如有錯誤,請大家見諒,
    引用文章:
    http://hi.baidu.com/serial_story ... fd0edd267fb500.html
    http://www.linuxidc.com/Linux/2010-08/27828p3.htm
    http://www.witech.com.cn


    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 唐河县| 安图县| 湖南省| 通道| 临湘市| 北川| 汤原县| 芦山县| 波密县| 晋江市| 昭平县| 始兴县| 友谊县| 商洛市| 五大连池市| 咸丰县| 汉寿县| 连江县| 株洲县| 方山县| 湖州市| 林芝县| 石河子市| 松阳县| 廊坊市| 视频| 临漳县| 安塞县| 平凉市| 三亚市| 东山县| 林芝县| 崇阳县| 永济市| 广汉市| 离岛区| 新安县| 郎溪县| 德令哈市| 延津县| 唐山市|