Linux s3c6410 移植

发布者:dong125612最新更新时间:2016-01-10 来源: eefocus关键字:Linux  s3c6410  移植 手机看文章 扫描二维码
随时随地手机看文章
UBoot移植

UBoot版本:u-boot-2010.03.tar.bz2
ARCH:        arm
CPU:        arm1176
BOARD:        samsung/smdk6410
SOC:        s3c64xx
添加和裁剪源代码
添加相关文件夹和源代码:
1)创建文件夹:board/samsung/smdk6410; nand_spl/board/samsung/smdk6410。
2)复制board/samsung/smdk6400/下所有文件到board/samsung/smdk6410。
3)复制nand_spl/board/samsung/smdk6400下所有文件到nand_spl/board/samsung/smdk6410。
4)复制include/configs/smdk6400.h为include/configs/smdk6410.h。
去除不相关代码:
5)删除board文件下除samsung外所有文件夹以及board/ samsung/下smdk6410外所有文件夹。
6)删除nand_spl/board下除samsung外所有文件夹以及nand_spl/board/samsung/smdk6410外所有文件夹。
7)删除include/configs/下除smdk6410.h以外其他所有文件。
8)删除顶层目录下所有的lib_* 其他文件夹,只需要保留lib_arm 和 lib_generic。
9)删除cpu目录下所有其他文件夹,只需要保留arm1176文件夹。
10)删除include下所有其他的asm_* 文件夹,只需要asm_arm和asm-generic,
11)删除include/arm-asm下arch-s3c64x0以外其他所有arch-*格式目录。
12)删除根目录下没有用到的onenan_ipl文件夹。
顶层Makefile修改
仿照smdk6400 添加smdk6410的实现
smdk6410_config :       unconfig
@echo "#define CONFIG_NAND_U_BOOT" > $(obj)include/config.h
@echo "RAM_TEXT = 0xc7e00000" >> $(obj)board/samsung/smdk6410/config.tmp
@$(MKCONFIG) $(@:_config=) arm arm1176 smdk6410 samsung s3c64xx
@echo "CONFIG_NAND_U_BOOT = y" >> $(obj)include/config.mk

修改boardsunplusdtvb7056下文件
1)修改smdk6400.c为smdk6410.c,并修改boardsamsungsmdk6410Makefile中对应的文件名。
修改nand_spl/board/samsung/smdk6410 下文件
1)修改Makefile文件中6400为6410:@ln -s $(TOPDIR)/board/samsung/smdk6410/lowlevel_init.S $@
至此:可以测试是否可以编译通过 make distclean&&make smdk6410_config&&make;

修改smdk6410.h中相关设置

//#define MACH_TYPE             1270 //smdk6400
#define MACH_TYPE               1626 //smdk6410 这个type必须和kernel的一致

#if     0
#define CONFIG_NET_MULTI
#define CONFIG_CS8900                  
#define CONFIG_CS8900_BASE              0x18800300
#define CONFIG_CS8900_BUS16            
#else
#define CONFIG_NET_MULTI
#define CONFIG_DRIVER_DM9000
#define CONFIG_DM9000_BASE              0x18000300
#define DM9000_IO                       CONFIG_DM9000_BASE
#define DM9000_DATA                     ( CONFIG_DM9000_BASE + 4 )
#endif

……

#define CONFIG_BOOTDELAY        3
#define CONFIG_ETHADDR      00:40:5c:26:0a:51
#define CONFIG_NETMASK      255.255.252.0
#define CONFIG_IPADDR       172.20.21.111
#define CONFIG_SERVERIP     172.20.9.11
#define CONFIG_GATEWAYIP    172.20.23.254
#define CONFIG_HOSTNAME     "divser1"
#define CONFIG_BOOTFILE     "uImage"
#define CONFIG_BOOTARGS       
            "console=ttySAC0,115200 " 
            "root=/dev/nfs rw nfsroot=172.20.9.11:/home/junxian/rootfs " 
            "ip=172.20.21.110:172.20.9.11:172.20.23.254:255.255.252.0:"
            "hoxm:eth0:none"
#ifdef CONFIG_ENABLE_MMU
#define CONFIG_BOOTCOMMAND      "nand read 0xc0018000 0x60000 0x1c0000;"
                                "bootm 0xc0018000"
#else
#define CONFIG_BOOTCOMMAND      "nand read 0x50018000 0x60000 0x1c0000;"
                                "bootm 0x50018000"
#endif

 

添加Uboot DM9000网卡驱动
#ifdef CONFIG_CMD_NET
int board_eth_init(bd_t *bis)
{
int rc = 0;
126 #ifdef CONFIG_CS8900
rc = cs8900_initialize(0, CONFIG_CS8900_BASE);
128 #endif
#ifdef CONFIG_DRIVER_DM9000
dm9000_initialize(bis);
#endif
    return rc;
}
#endif

现在ping,tftp,等等命令已经好用,中间遇到的问题,有待研究:
1)ping命令可以,tftp命令停在loading #, 发现修改smdk6410 config时候写入的RAM_TEXT地址为MMU地址即好用RAM_TEXT = 0xc7e00000,只是编译的时候ext2部分报错,直接被我屏蔽了include/configs/smdk6410.h中对应的CONFIG_CMD_EXT2选项。
include/configs/smdk6410.h中地址和MMU相关定义如下:
TEXT_BASE在board/Samsung/smdk6410/config.mk中定义:TEXT_BASE=${RAM_TEXT}
#if !defined(CONFIG_NAND_SPL) && (TEXT_BASE >= 0xc0000000)
#define CONFIG_ENABLE_MMU
#endif

 

内核配置和编译
Kernel版本:2.6.35
CPU:        arm1176 JZ-S
BOARD:        友坚6410 (基于samsung/smdk6410修改代码)
内核配置编译过程
修改顶层Makefile:ARCH和CROSS_COMPILE定义
ARCH        ?= arm
CROSS_COMPILE    ?= arm-linux-

内核清除:make mrproper(会清除配置好的.config文件和所有.o文件,如果干净的内核没有必要执行)
内核配置:make menuconfig (可以依据一个相近的配置cp arch/arm/configs/s3c6400_defconfig  ./.config)
内核编译:make
添加DM9000网卡驱动
1)arch/arm/mach-s3c6410/mach-smdk6410.c

 

#include
……


#define S3C64XX_PA_DM9000       (0x1800030)
#define S3C64XX_VA_DM9000       S3C_ADDR_CPU(0x01000000)
#define S3C64XX_SZ_DM9000       SZ_1M

static struct resource smdk6410_dm9000_resources[] = {
        [0] = {
                .start = S3C64XX_PA_DM9000,
                .end   = S3C64XX_PA_DM9000 + 3,
                .flags = IORESOURCE_MEM
        },
        [1] = {
                .start = S3C64XX_PA_DM9000 + 4,
                .end   = S3C64XX_PA_DM9000 + 255,
                .flags = IORESOURCE_MEM
        },
    [2] = {
        .start  = IRQ_EINT(7), 
        .end    = IRQ_EINT(7),
        .flags  = IORESOURCE_IRQ | IRQF_TRIGGER_HIGH,
    },
};

static struct dm9000_plat_data smdk6410_dm9000_pdata = {
    .flags          = DM9000_PLATF_16BITONLY
};

struct platform_device smdk6410_dm9000 = {
    .name           = "dm9000",
    .id             = -1,
    .num_resources  = ARRAY_SIZE(smdk6410_dm9000_resources),
    .resource       = smdk6410_dm9000_resources,
    .dev            = {
        .platform_data = &smdk6410_dm9000_pdata,
    
}; 

……

static struct map_desc smdk6410_iodesc[] = {
    {
        .virtual    = (unsigned long)S3C64XX_VA_DM9000,
        .pfn        = __phys_to_pfn(S3C64XX_PA_DM9000),
        .length    = S3C64XX_SZ_DM9000,
        .type        = MT_DEVICE,
    },   
};

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_usb,
        &s3c_device_usb_hsotg,
        &smdk6410_lcd_powerdev,

        &smdk6410_dm9000,
};
NFS rootfs相关配置
1、devices support 中打开DM9000支持
2、打开filsystem 中nfs的相关支持
                --- Network File Systems    
  │ │                      <*>   NFS client support 
  │ │                      [*]     NFS client support for NFS version 3   
  │ │                      [ ]       NFS client support for the NFSv3 ACL protocol extension
  │ │                      [*]     NFS client support for NFS version 4 (EXPERIMENTAL)
  │ │                      [ ]       NFS client support for NFSv4.1 (DEVELOPER ONLY)  
  │ │                      [*]     Root file system on NFS 

备注:Linux启动参数(uboot bootargs传递过来的)
"console=ttySAC0,115200 root=/dev/nfs rw nfsroot=172.20.118.103:/work/workspace/s3c6410/rootfs ip=172.20.118.193:172.20.118.103:172.20.118.254:255.255.255.0:hoxm:eth0:none"
停在Starting kernel问题解决
常见原因:
1)地址错误
2)Boot参数设置错误
3)串口fifo设置不必配(本次移植就是因为这个原因)
archarmmach-s3c6400includemachuncompress.h 中添加uart fifo配置

static void arch_detect_cpu(void)
{
   
    fifo_mask = S3C_UFSTAT_TXMASK;
    fifo_max = 63 << S3C_UFSTAT_TXSHIFT;
}

根文件系统建立
Download  busybox

#make menuconfig
#make
#make install
    busybox make,如果出现找不到crypt m库的错误提示Trying libraries: crypt m Library crypt is needed, can't exclude it (yet)  Library m is needed, can't exclude it (yet) Final link with: crypt m,可以不必理会,直接make install

编译bash
export CC=arm-sunplus-linux-gnueabi-gcc
./configure --host=arm-sunplus-linux-gnueabi --enable-static-link --without-bash-malloc
make
make之后源码包顶层目录下生成bash,不用make install,直接copy到busybox的/bin目录

最简单的默认使用sh的根文件系统制作:
busybox生成:  /bin /sbin /usr/bin /usr/sbin
mk空目录:mkdir dev etc home lib mnt opt proc sys tmp var
busybox /examples copy /etc下inittab,fstab,rc等相关脚本覆盖到/etc中

关键字:Linux  s3c6410  移植 引用地址:Linux s3c6410 移植

上一篇:Linux2.6.36移植到飞凌S3C6410开发板 步骤
下一篇:linux驱动移植的数据结构

推荐阅读最新更新时间:2024-03-16 14:43

苹果曾试图将Mac OS移植到ARM架构但失败
据国外媒体报道,一名曾在苹果操作系统工程师团队工作过的实习生在论文中透露,苹果曾试图将Mac OS X Snow Leopard移植到ARM架构。 这位大学生的名字为Tristan Schaap。2010年的时候,Tristan Schaap在苹果实习了12周,这段时间里,他的主要工作就是让Mac OS X系统的核心在ARM架构处理器上运行(MV88F6281处理器,由Marvell推出)。随后Tristan Schaap以此工作经历写了篇毕业论文。但由于包含敏感信息,该论文起初被禁止出版。直到数月前,荷兰的代尔夫特科技大学才出版了这篇论文。 苹果曾试图将Mac OS X Snow Leopard移植到ARM架构 Tr
[单片机]
大大简化AMP配置与使用的Linux
嵌入式系统一般分为两大类:需要硬实时性能的;和不需要硬实时性能的。过去,我们不得不做出艰 抉择,即选择实时操作系统的性能还是我们钟爱的 Linux 系统的丰富特性,然后努力弥补不足之处。 典型的 AMP配置在很多方面类似于基于 PCI 的系统,即 Linux 域起到主机作用,RTOS域起到适配器作用,并有一个或多个共享存储器域用来实现两个域之间的通信。不过与 PCI 不同,AMP 配置能更方便、动态地为一个或另一个域分配资源(标准外设和自定义逻辑)。此外,Linux/RTOS AMP 系统能根据运行时间要求——例如各种外部设备的有无——动态地重新配置可编程逻辑。 灵活程度通常会与建立 AMP 系统所涉及的复杂性和难度息息相
[单片机]
大大简化AMP配置与使用的<font color='red'>Linux</font>
RT-Thread Smart混合微内核操作系统发布,对标智能设备中的Linux
9月1日,当RT-Thread 创始人熊谱翔宣布最新微内核操作系统RT-Thread Smart 依然开源时,发布会现场响起了热烈的掌声,这个被业内人士亲切称呼为“熊大”的人,再一次为大家带来了不小惊喜。 如今在圈内提起RT-Thread,大多数工程师都已知晓,更有特别熟悉的,还会 滔滔不绝讲上半天。这个诞生于2006年精致而优雅的操作系统,目前已经成为国人自主开发、国内最成熟稳定和装机量最大的开源 RTOS,睿赛德科技公司在2019年年底又获得近亿元人民币的 B 轮融资。那么在RT-Thread蓬勃发展之际,RT-Thread Smart的推出又有哪些战略意义呢? 何为RT-Thread Smart? 熊谱翔介绍,与RT
[嵌入式]
RT-Thread Smart混合微内核操作系统发布,对标智能设备中的<font color='red'>Linux</font>
μC/OS-Ⅱ在ARM单片机S3C44B0x上的移植
引 言     目前,嵌入式系统在工业控制、家用电器、移动通信、PDA等各种领域得到了越来越广泛的应用。由于用户对嵌入式产品的性能要求越来越高,程序设计也变得越来越复杂,这就需要一个通用的嵌入式实时操作系统来对其进行管理和控制。对移植了操作系统的嵌入式系统进行设计和开发,可以大大减小程序员的负担,对于不同的应用可以按照相同的步骤来完成系统的设计。     μC/OS-Ⅱ是一种简单高效、源代码公开的嵌入式实时操作系统,具有良好的可扩展性和可移植性,被广泛的应用到各种嵌人式处理器上。μCOS-Ⅱ操作系统拥有可固化,可裁剪,可剥夺性的实时内核,可同时管理64个系统任务。利用移植μCOS-Ⅱ操作系统的嵌入式微处理器来设计和开发产品
[嵌入式]
STM32F302R8T6移植RT-THREAD SRAM配置
自上篇文章,终于可以下载程序到芯片中.然后用ST-LINK在线调试,发现跑到RT-THREAD中的 rt_system_heap_init函数就不出来,跟踪进入 在两者中间就出现硬件错误的中断. 查看一下HEAP初始化的大小 可以明显看到错误在HEAP的尾地址. 看一下调用的参数 view plain copy rt_system_heap_init((void*)STM32_SRAM_BEGIN, (void*)STM32_SRAM_END); 问题就在STM32_SRAM_END这里,上图看一下 修改后的参数为 view plain copy // /e // o Inte
[单片机]
STM32F302R8T6<font color='red'>移植</font>RT-THREAD SRAM配置
OK6410A 开发板 (八) 73 linux-5.11 OK6410A linux 内核同步机制 互斥锁的实现
解决的问题是什么 所有异常原因 限制是什么 加锁函数会引起睡眠,所以不能... 实现 / https://elixir.bootlin.com/linux/v4.0/source/kernel/locking/mutex.c#L95 /* 我们将互斥锁/解锁逻辑分为单独的fastpath和slowpath函数,以减少fastpath上的寄存器压力。 我们还将fastpath放在内核映像的第一位,以确保CPU将分支预测为默认的untaken。 */ __visible void __sched __mutex_lock_slowpath(atomic_t *lock_count); /* 为此任务专门锁定互斥锁。 如果互
[单片机]
串行2_pin 12864液晶移植到s12
Created on: 2012-10-17 Author: zhang bin 学习笔记 for MC9S12XS128 lcd12864 ser_2_pin redesigned by zhang bin 2012-10-17 versions :V-0.1 All Rights Reserved Ser_12864.h文件如下 注释的比较详细: #ifndef SER_12864_H_ #define SER_12864_H_ //设定wr为PA0 //设定en为PA1 //在main()中开输出 / #include derivative.h
[单片机]
μC/GUI在MSGl9264液晶上的移植
摘要:介绍在MSP430F149单片机上移植,μC/CUI到MSCl9264液晶的过程, 详细阐述了,μC/GUI移植的原理以及在移植中应注意的事项。 关键词:μC/GUI MSGl9264 移植 MSP430F149 μC/GUI是美国Micrium公司出品的一款针对嵌入式系统的优秀图形软件。与μC/OS一样,μC/GUI具有源码公开、可移植、可裁减、稳定性和可靠性高的特点 。采用μC/GUI,开发人员可以很方便地在液晶上显示文本、曲线、图形以及各种窗口对象如按钮、编辑框、滑动条等,可完全产生类似于Windows的显示效果。另外,μC/GUI提供了在VC下的仿真库,这使得用户完全可以在Windows下仿真μC/GUI的各种效
[应用]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved