linux 2.6.32 在arm9(s3c2440)平台的移植 - 标题要长(2)

发布者:HappyExplorer最新更新时间:2024-07-29 来源: cnblogs关键字:linux  6  arm9  s3c2440  移植 手机看文章 扫描二维码
随时随地手机看文章

(1)


s3c2440平台关于nand flash部分的代码,


' 在你弄清楚移植代码的每一个步骤是为什么之前,不要去做所谓的移植,那是毫无意义的'


*****/arch/arm/plat-s3c24xx/common-smdk.c*****


static struct mtd_partition smdk_default_nand_part[] = {

        [0] = {

                .name   = 'supervivi',

                .size   = 0x00040000,

                .offset = 0,

        },

        [1] = {

                .name   = 'param',

                .offset = 0x00040000,

                .size   = 0x00020000,

        },

        [2] = {

                .name   = 'Kernel',

                .offset = 0x00060000,

                .size   = 0x00500000,

        },

        [3] = {

                .name   = 'root',

                .offset = 0x00560000,

                .size   = 1024 * 1024 * 1024, 

        },

        [4] = {

                .name   = 'nand',

                .offset = 0x00000000,

                .size   = 1024 * 1024 * 1024, 

        }

}; //changed

static struct s3c2410_nand_set smdk_nand_sets[] = {

        [0] = {

                .name           = 'NAND',

                .nr_chips       = 1,

                .nr_partitions  = ARRAY_SIZE(smdk_default_nand_part),//note

                .partitions     = smdk_default_nand_part,

        },

};//not changed

static struct s3c2410_platform_nand smdk_nand_info = {

        .tacls          = 20,

        .twrph0         = 60,

        .twrph1         = 20,

        .nr_sets        = ARRAY_SIZE(smdk_nand_sets),//note

        .sets           = smdk_nand_sets,

};//not changed

static struct platform_device __initdata *smdk_devs[] = {

        &s3c_device_nand, //

        &smdk_led4,

        &smdk_led5,

        &smdk_led6,

        &smdk_led7,

};//not changed

void __init smdk_machine_init(void)

{

        /* Configure the LEDs (even if we have no LED support)*/

        s3c2410_gpio_cfgpin(S3C2410_GPF(4), S3C2410_GPIO_OUTPUT);

        s3c2410_gpio_cfgpin(S3C2410_GPF(5), S3C2410_GPIO_OUTPUT);

        s3c2410_gpio_cfgpin(S3C2410_GPF(6), S3C2410_GPIO_OUTPUT);

        s3c2410_gpio_cfgpin(S3C2410_GPF(7), S3C2410_GPIO_OUTPUT);

        s3c2410_gpio_setpin(S3C2410_GPF(4), 1);

        s3c2410_gpio_setpin(S3C2410_GPF(5), 1);

        s3c2410_gpio_setpin(S3C2410_GPF(6), 1);

        s3c2410_gpio_setpin(S3C2410_GPF(7), 1);

        if (machine_is_smdk2443())

                smdk_nand_info.twrph0 = 50;

        s3c_device_nand.dev.platform_data = &smdk_nand_info; //note

        /*s3c_device_nand的类型是platform_device , 

          这里是platform_device::dev

          s3c_device_nand这个变量是在哪个文件定义的?

          -有的版本的内核代码, 在devs.c中定义s3c_device_nand

          -common-smdk.c中引用了此变量,故这个s3c_device_nand一定不是static.

        */

        

        platform_add_devices(smdk_devs, ARRAY_SIZE(smdk_devs));

        s3c_pm_init();

}//not changed


把上面涉及nand flash的代码单独摘出来, 看的清楚些,


(2)


内核mane zImage, 烧写~ 开机


Uncompressing Linux...................................................................... done, booting the kernel.

Error: unrecognized/unsupported machine ID (r1 = 0x0000016a).

 

因为mini2440的开发板bootloader是友善自己的supervivi, 开机后bl向内核传递一个机器码, 如果与内核中的机器码不匹配, 则出现上面的错误,  错误中提示的是0x000007cf, 换成10进制就是1999, 这个应该就是MINI2440的机器码,

 


BL传递的机器码是0x7cf, 但是内核是按照SMDK2440的配置编译的, 故内核的机器码为0x362,

方法有三, 前两个都麻烦, 要么改内核的机器码, 要么改vivi, 第三种比较简单:

 


方法就是进viviv,

选[s] Set the boot parameters,

再选[s] Set parameter,

Enter the parameter's name, 此处输入 mach_type

Enter the parameter's value, 此处输入 362


再选[w] Write the parameter table to flash memeory,

再选[q] Quit

再选[b] Boot the system

 

(3)

经过上面的修改, 机器码验证ok, 但是有新错误

 

sysfs: duplicate filename 's3c2440-nand' can not be created

线索http://www.arm9home.net/simple/index.php?t1878.html

原因是, 在原来的代码中, arch/arm/plat-s3c24xx/common-smdk.c, 已经存在下面的代码:

static struct platform_device __initdata *smdk_devs[] = {

        &s3c_device_nand, //注意这里

        &smdk_led4,

        &smdk_led5,

        &smdk_led6,

        &smdk_led7,

};

但是我照着别的移植帖子做, 完全照抄修改, 改动了arch/arm/mach-s3c2440/mach-smdk2440.c的代码:

static struct platform_device *smdk2440_devices[] __initdata = {

        &s3c_device_usb,

        &s3c_device_lcd,

        &s3c_device_wdt,

        &s3c_device_i2c0,

        &s3c_device_iis,

        &s3c_device_nand, //这里如果加上这行, 就出现错误,重复注册了s3c_device_nand这个设备

};

 

(4)

出现错误:

Kernel panic - not syncing: Attempted to kill init!

线索:http://www.cublog.cn/u1/43090/showart_1967029.html

进入Kernel Configure

Kernel Features  --->

            [*] Use the ARM EABI to compile the kernel                   

            [*]   Allow old ABI binaries to run with this kernel (EXPERIMENTA)

这个EABI支持居然忘了选,,,,,

 

-------------------------

vi arch/arm/tools/mach-types

s3c2410                 ARCH_S3C2410            S3C2410                 182


s3c2440                 ARCH_S3C2440            S3C2440                 362

smdk2440                MACH_SMDK2440           SMDK2440           1008

mini2440                MACH_MINI2440           MINI2440                1999

改为:---------------------------->

smdk2440                MACH_SMDK2440           SMDK2440           1999


mini2440                MACH_MINI2440           MINI2440                1008

偷梁换柱,,, 因为我的板子的Kernel Configure的system type -> S3C2440 Machines,选择的是SMDK2440,

所以编译出的内核的机器码是1008, 但是vivi传递的机器码是1999,

在不改变vivi的情况下, 通过这个方法修改内核的机器码~, 实验~ ok

但是但是但是! 为什么串口中断打印的是: Error: unrecognized/unsupported machine ID (r1 = 0x0000016a). ??

0x16a = 362 !


关键字:linux  6  arm9  s3c2440  移植 引用地址:linux 2.6.32 在arm9(s3c2440)平台的移植 - 标题要长(2)

上一篇:linux - 驱动中如何访问CPU中的寄存器?
下一篇:linux 2.6.32 在arm9(s3c2440)平台的移植2 -- Kconfig和Makefile

推荐阅读最新更新时间:2026-03-20 11:42

linux 2.6.32arm9s3c2440)平台的移植2 -- Kconfig和Makefile(2)linux
Linux内核源码树的每个目录下都有一个Kconfig和Makefile, 分布到各目录的Kconfig构成了一个分布式的内核配置数据库, 每个Kconfig分别描述了所属目录源文档相关的内核配置菜单. 在linux目录执行内核配置make menuconfig时, 从Kconfig中读出菜单, 用户选择后保存到linux-2.6/.config的内核配置文档中. 在内核编译时, 主Makefile调用这个.config, Kconfig就是对应着内核的每级配置菜单. 添加新的驱动时需要修改有两种( 1如果添加的只是文件, 则只需修改当前层Kconfig和Makefile文件; 2如果添加的是目录, 则需修改当前层和新添目
[单片机]
linux 2.6.32arm9s3c2440)平台的移植2 -- Kconfig和Makefile(2)
make menuconfig后,首先读入linux-2.6.32.2/arch/arm/Kconfig ??? sudu vi linux-2.6.32.2/arch/arm/Kconfig (1)找到开头的mainmenu Linux Kernel Configuration source 这一行, 这是整个Configure树的根, 这一行匹配最后一个 带endmenu字样的行 .再找到init/Kconfig 这一行, 可以看到该行之前的都是固定选项,不会出现在Configure可选选项的, 某个config的例子如下 config CONFIG_SYMBOL tristate string 或者 bool
[单片机]
linux 2.6.32arm9s3c2440)平台的移植
板子用的友善的mini2440, 起初按照光盘提供的手册, 照猫画虎,,,,,,,,,但是遇到各种问题, 很多未解决.....原因是还没理解每层目录的Makefile和Kconfig的关系, 以及在Kernel Configure菜单树中对应的选项, 以及对nand_flash设备的结构体的意义没搞清楚,~ so~ 在http://www.kernel.org/ 下载2.6.32的源代码. 编译器用的arm-linux-gcc 4.1.2 . 1 内核代码/uboot代码中中机器码的定义位置,在/root/linux-2.6.32/arch/arm/tools/mach-types 和 uboot/include/asm-
[单片机]
基于S3C2440Linux内核移植和yaffs2文件系统制作-- 配置Linux内核
1.3.3 配置Linux内核 1、 进入Linux-2.6.29.1内核主目录,通过以下命令将2410的默认配置文件写到当前目录下的.config。S3C2410的配置和S3C2440差不多,,在这基础上进行修改。 make s3c2410_defconfig 2、 配置内核模块的功能,有几种方式可以进行界面选择: make menuconfig(文本选单的配置方式,在有字符终端下才能使用) make xconfig(图形窗口模式的配置方式,图形窗口的配置比较直观,必须支持Xwindow下才能使用) make oldconfig(文本配置方式,在原内核配置的基础修改时使用) 这里使用make menuconfi
[单片机]
基于S3C2440Linux内核移植和yaffs2文件系统制作--Linux源码参数
1.3.2 修改Linux源码中参数 1、解压内核源码 mkdir /opt/studyarm cd /mnt/hgfs/share tar –jxvf linux-2.6.29.1.tar.bz2 –C /opt/studyarm 2、 进入内核目录,修改makefile,并对内核进行默认配置进行修改 193行,修改 ARCH ?=arm CROSS_COMPILE ?=arm-linux- 3、 修改平台输入时钟 找到内核源码arch/arm/mach-s3c2440/mach-smdk2440.c文件,在函数 static void __init smdk24
[单片机]
郭天祥-S3C2440开发板Linux2.6.31移植教程
本人使用的开发板是广州天嵌的TQ2440开发板 最近使用了郭天祥的教程学习S3C2440嵌入式linux2.6.31系统移植,移植yaffs2文件系统成功后,发现开发板移植的系统的ping命令无法ping通电脑。后面通过烧录开发板自带的linux镜像文件和yaffs2文件系统,对比之后。发现本人的笔记本(联想G40系列),如果只接通过本地网卡与开发板直连,无法ping通,但是使用自己的台式电脑,可以使用网线直连开发板ping通,确认了问题的原因是: 1.笔记本在网线直连开发板的情况下,无法ping通开发板。 2.个人移植的linux 2.6.31操作系统驱动存在问题。 第一个问题很好解决,如果要继续
[单片机]
linux-2.6.24.3下移植SD/MMC到S3C2440上的全历程
1.起首下载2.6.24.3内核源码。其他内核不包管可以。移植部门就不讲了,假如不会参考我的其他文章。我仅仅测试了这个。 2.去http://svnweb.openmoko.org/*chec ... _mci.patch?rev=4096 下载SD/MMC patch,其他晚期版本不可,我就栽倒了这其中间。 3.把 s3c_mci.patch copy到linux-2.6.24.3下。执行patch -p1 s3c_mci.patch 呵呵,早年不会用patch,此次也用上了。 4.make menuconfig,选择MMC/SD ,选择言语CP437,ISO 8859-1,最好也同时选择SCSI相关的工具吧,连USB也一块支撑
[单片机]
goAhead 2.5嵌入式web服务器移植arm9 2440 + linux
本文内容概要:详细描述了移植goAhead 2.5到S3C2440的linux系统的过程、步骤、遇到的问题及其解决方法。 开发环境: 宿 主 机:window XP; 虚 拟 机:ubuntu9.10; 交叉编译器:arm-uclibc-gcc(arm-linux-gcc-4.3.2可以顺利编译通过) ——————————————————————————————————————————————————————————————————— 1. GoAhead Web服务器介绍 goAhead Web服务器,小巧、精致,提供了值得称道的性能,特别适合于嵌入式系统,因此,在很多嵌入式产品如
[单片机]
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved