// 主题:Real6410移植linux-2.6.39.1

// 作者:kevinjz2010@gmail.com

// 版权:kevinjz原创

// 平台:linux-2.39.1 real6410 (real6410开发板)

// 发布日期:2011-06-21

// 最后修改:2011-10-06

// 注意事项:欢迎转载,但不得在转载的时候擅自修改、删除文章的任何部分

//-------------------------------------------------------------------------------------------------

一、于http://www.kernel.org/下载linux-2.6.39.1内核源码,解压至文件夹。

二、进入源码所在文件夹,对内核进行配置

$make menuconfig

将arch/arm/configs/s3c6400_deconfig拷贝至内核根目录,并修改根目录中的Makefile,将其中的

ARCH= arm

CROSS_COMPILE= arm-linux-

$make s3c6400_deconfig

以上即生成了s3c6410的默认配置,之后在次基础上进行修改。

修改内核中的机器识别码,/arch/arm/tools/mach-types.h,搜索6410,将其机器码改为1626(与u-boot中的匹配即可,也可一修改uboot中的机器码/include/configs/smdk6410.h

注:编译器采用gcc-4.5.1

三、添加SD驱动(参考华天正论坛上的移植方法):

1、首先,platform设备注册。修改arch/arm/mach-s3c64xx/mach-real6410.c文件

在其中加入:

&s3c_device_hsmmc0,

&s3c_device_hsmmc1,

staticstruct platform_device *real6410_devices[] __initdata ={//定义6410中的外设->platform_device结构体中的设备种类,各种外设的具体定义一般在plat文件夹中定义。

//其中包括外设的name,此值需要和相应外设驱动中platform_driver结构体中的name相对应,

//如nand的名称在arch/arm/plat-sumsang/dev-nand.h中

//定义为"s3c6410-nand",在驱动文件/drivers/mtd/nand/s3c_nand.c中对应为"s3c6410-nand"

//又如SD->hsmmc0外设,其name在arch/arm/plat-sumsang/dev-hsmmc.c中定义为"s3c-sdhci",

//在驱动文件drivers/mmc/host/sdhci-s3c.c中的platform_driver中对应为"s3c-sdhci"

//每个外设有其独有的资源->resource(包括寄存器资源以及中断资源,

//其中申明了外设在cpu寄存其中的地址范围以及中断种类,一般在plat文件夹中定义)

//每个外设有其独有的定义结构体(在plat文件夹中对应的头文件中定义)

&real6410_device_eth,

&s3c_device_hsmmc0,

&s3c_device_hsmmc1,

&s3c_device_fb,

&s3c_device_nand,

&s3c_device_adc,

&s3c_device_ts,

&s3c_device_ohci,

};

2、定义platdata,若要使用自定义数据,则在上面的文件中添加:

/*--------------------------------SD---------------------------------*/

/*staticstruct s3c_sdhci_platdata real6410_hsmmc0_pdata ={//该结构体位于plat/sdhci.h

.max_width= 4,

.cd_type= S3C_SDHCI_CD_INTERNAL,

};

staticstruct s3c_sdhci_platdata real6410_hsmmc1_pdata = {

.max_width= 4,

.cd_type= S3C_SDHCI_CD_PERMANENT,

};*/

若要使用内核默认设置数据,则在arch/arm/plat-samsung/dev-hsmmc(num).c中定义了,可以直接使用。

3、在real6410_machine_init函数中加入:

//--------------------------------若使用自定义,则添加如下--------------SD驱动初始化注册

// s3c_sdhci0_set_platdata(&real6410_hsmmc0_pdata);//该函数位于plat-samsung/dev-hsmmc(0~3).c中

// s3c_sdhci1_set_platdata(&real6410_hsmmc1_pdata);

//--------------------------------若使用默认定义则用以下的-----------------------------------

s3c_sdhci0_set_platdata(&s3c_hsmmc0_def_platdata);

s3c_sdhci1_set_platdata(&s3c_hsmmc1_def_platdata);

//实际经测试,此步骤可以省略,应该内核某处已经完成了这个任务,但我没有找到在哪里。

4、加入头文件

#include<plat/sdhci.h>

#include<linux/mmc/host.h>

5、在内核中添加配置中选择SD驱动

$make menuconfig,按REAL手册中的添加SD驱动

另外在filesystems->native language support中,将defaultNLS option的值改为utf8,并选上NLSUTF-8以及nlsiso8859-1,simplechinene。

自此,SD驱动配置完成

四、添加nand驱动(参考华天正论坛上的移植方法),

1、在/arch/arm/mach-s3c64xx/mach-real6410.c中添加分区信息(不许要添加头文件)

structmtd_partition real6410_nand_part[] = {

#if0

{

.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,

},

#endif

{

.name= "cramfs",

.offset= (4*SZ_1M),

.size= (4*SZ_1M),

},

{

.name= "ubifs",

.offset= MTDPART_OFS_APPEND,

.size= MTDPART_SIZ_FULL,

},

};

2、定义,在上面的文件加入:

staticstruct s3c2410_nand_set real6410_nand_sets[] = {

[0]= {

.name ="nand",

.nr_chips =1,

.nr_partitions =ARRAY_SIZE(real6410_nand_part),

.partitions =real6410_nand_part,

},

};

staticstruct s3c2410_platform_nand real6410_nand_info ={//读写nand的时钟信息,在S3C6410手册中查找数据

.tacls =25,

.twrph0 =55,

.twrph1 =40,

.nr_sets =ARRAY_SIZE(real6410_nand_sets),

.sets =real6410_nand_sets,

};

<!--@page { margin: 2cm }P { margin-bottom: 0.21cm }-->

3、在real6410_machine_init函数中加入:

//---------------------------------nand驱动初始化注册-----------------------------------------

s3c_nand_set_platdata(&real6410_nand_info);

4、配置内核

$make menuconfig

devicedriver->MTD support中选中

MTDpartitioning support、Commandline partition table parsing、Cachingblock device access to MTD devices、NANDDevice Support、enableubi

在nanddevice suppot中选中NANDFlash support for Samsung S3C SoCs 、SamsungS3C NAND driver debug、SamsungS3C NAND Hardware ECC 。

此处需要注意:对上面几个选项查看帮助("?")发现它们是对2410进行配置的,所以需要nand驱动文件夹中的Kconfig,将/drivers/mtd/nand/Konfig修改,把对应选项的“2410”改成“S3C”,原因查看Makefile中的对应选项的config要求。

在filesystems->misc filesystem-> 中加入cramfs、UBI的支持,可以参照real28内核的配置

5、将real641028内核中的/drivers/mtd/nand/s3c_nand.c拷贝之39内核的相应文件夹,并修改probe函数#ifdefined(CONFIG_MTD_NAND_S3C_HWECC)之前的部分,可以将友善38内核的相应部分复制过来。

6、编译cramfs文件系统

$sudo apt-get install cramfsprogs

拷贝REAL6410的cramfs系统源码,

$mkcramfs root_mkfs rootfs.cramfs

下载文件系统到开发板

7、修改内核启动参数

setenv bootargs noinitrd root=/dev/mtdblock0 console=ttySAC0 init=/linuxrcvideo=fb:AT070TN83

8、最后当然要检查一下内核选项,配置好之后编译下载;

9、至此,REAL6410已经能从CRAMFS文件系统启动了!

Real6410移植linux-2.6.39.1记录(1)-启动cramfs根文件系统相关推荐

  1. 移植Linux(ucLinux)到GBA的记录

    移植Linux(ucLinux)到GBA的记录 v1.0 teawater@hotmail.com 1.感谢 向所有直接和间接帮助过我的的朋友们表示衷心的感谢,因为人数太多我就不一一提到了. 2.写在 ...

  2. 尚观6410开发板移植linux 3.6.6问题记录及经验小结

    把开发板右上角的红色启动选项开关,两个都拨到下面(NAND),连接串口,已经内置了uboot 1.16. 根文件系统使用ext2的ramdisk,由于网卡无法驱动故无法使用nfs的根文件系统,网卡驱动 ...

  3. 从单片机开发转向Linux开发系列博客五:Nand Flash根文件系统制作

    版本 作者 参与者 日期 备注 V1.0 wuya(微信号:wangwenxue1989) 2019/05/17 创建 1.引言 之前系列的文章介绍了如何编译Uboot.Kernel以及使用默认的ra ...

  4. ARM Linux启动流程-根文件系统的加载

    前言 在Kernel启动的初始阶段,首先去创建虚拟的根文件系统(rootfs),接下来再去调用do_mount来加载真正的文件系统,并将根文件系统切换到真正的文件系统,也即真实的文件系统. 接下来结核 ...

  5. 移植Linux-3.4.2过程学习笔记2——无法挂载根文件系统

    此时内核已经可以打印串口信息了,目前的问题是无法挂载根文件系统. 搜索分区名,查看是在哪里定义的: grep "\"Boot\ Agent\"" * -nR 得 ...

  6. 移植根文件系统到linux内核 s3c2440,u-boot-2011.06在基于s3c2440开发板的移植之引导内核与加载根文件系统...

    三.根文件系统的制作 我们利用busybox来制作根文件系统 1.在下列网站下载busybox-1.15.0.tar.bz2 在当前目录下解压busybox tar -jxvf busybox-1.1 ...

  7. zynq-7000移植linux操作系统

    目录 1.u-boot 2.linux内核 3.devicetree.dtb 4.BOOT.bin 5.根文件系统 6.修改bootargs与bootcmd 7.相关网站 开发环境: vivado 2 ...

  8. 移植ubuntu14.04根文件系统至beaglebone开发板探索

    移植ubuntu14.04根文件系统至BeagleBone开发板探索 移植背景 我是一个linux小白,然而由于项目需要,一个师兄为机器人的控制定制了一个开发板,基于beaglebone.由于此开发板 ...

  9. Exynos4412 移植针对Samsung的Linux-6.1(二)SD卡驱动——解决无法挂载SD卡的根文件系统

    系列文章目录 Exynos4412 移植针对Samsung的Linux-6.1(一)下载.配置.编译Linux-6.1 Exynos4412 移植针对Samsung的Linux-6.1(二)SD卡驱动 ...

最新文章

  1. UVA1364 Knights of the Round Table(双连通分量、二分图染色,超详细解释)
  2. Tensorflow 源码安装成功,导入报错 ImportError: cannot import name 'build_info'
  3. 2019全球AI文创大赛正式启动,AI科技赋能新文创
  4. Windows环境下Android Studio系列5—日志调试
  5. Scala 写第一个程序HelloWorld
  6. 中国中医科学院大学落户苏州吴中区
  7. linux下设置java,Linux下设置java的环境变量
  8. django中的urlpatterns的正则语法
  9. JAVA中request.getParameterMap()用法笔记
  10. 前端开发~uni-app ·[项目-仿糗事百科] 学习笔记 ·004【App.vue引入全局公共样式】
  11. Mysql 基于 Amoeba 的 读写分离
  12. jquery知识点总结(转载)
  13. Navicat Premium 15 工具自动被杀毒防护软件删除解决方法
  14. 明解c语言 练习,《明解C语言》示例代码和练习代码[第8章]
  15. LittleVGL开发之显示中文字体以及矢量图标
  16. 项目管理体制改革的经验和成效(转)
  17. c# 微信公众号开发之自定义菜单栏
  18. 【图像分割】基于方向谷形检测实现静脉纹路分割附MATLAB代码
  19. 【python】os.path.exists(file_path) 存在的问题
  20. 如何添加和删除字段?

热门文章

  1. 计算机网络之面试常考--整理来自牛客网
  2. Android中的TCP协议与UDP协议
  3. js怎么实现导出html文件,JS - 使用 FileSaver.js 实现浏览器文件导出
  4. MSET算法参差分析(二)
  5. epub电子书如何用安卓手机打开?
  6. 外企or国内互联网?
  7. 黑马旅游网学习笔记之旅游线路查询(七)
  8. 中软国际成功签单东马来西亚智慧城市项目
  9. HTML,CSS,JavaScript 分别是什么?
  10. **6-7 十进制转换二进制 (10分)**