Real6410移植linux-2.6.39.1记录(1)-启动cramfs根文件系统
// 主题: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根文件系统相关推荐
- 移植Linux(ucLinux)到GBA的记录
移植Linux(ucLinux)到GBA的记录 v1.0 teawater@hotmail.com 1.感谢 向所有直接和间接帮助过我的的朋友们表示衷心的感谢,因为人数太多我就不一一提到了. 2.写在 ...
- 尚观6410开发板移植linux 3.6.6问题记录及经验小结
把开发板右上角的红色启动选项开关,两个都拨到下面(NAND),连接串口,已经内置了uboot 1.16. 根文件系统使用ext2的ramdisk,由于网卡无法驱动故无法使用nfs的根文件系统,网卡驱动 ...
- 从单片机开发转向Linux开发系列博客五:Nand Flash根文件系统制作
版本 作者 参与者 日期 备注 V1.0 wuya(微信号:wangwenxue1989) 2019/05/17 创建 1.引言 之前系列的文章介绍了如何编译Uboot.Kernel以及使用默认的ra ...
- ARM Linux启动流程-根文件系统的加载
前言 在Kernel启动的初始阶段,首先去创建虚拟的根文件系统(rootfs),接下来再去调用do_mount来加载真正的文件系统,并将根文件系统切换到真正的文件系统,也即真实的文件系统. 接下来结核 ...
- 移植Linux-3.4.2过程学习笔记2——无法挂载根文件系统
此时内核已经可以打印串口信息了,目前的问题是无法挂载根文件系统. 搜索分区名,查看是在哪里定义的: grep "\"Boot\ Agent\"" * -nR 得 ...
- 移植根文件系统到linux内核 s3c2440,u-boot-2011.06在基于s3c2440开发板的移植之引导内核与加载根文件系统...
三.根文件系统的制作 我们利用busybox来制作根文件系统 1.在下列网站下载busybox-1.15.0.tar.bz2 在当前目录下解压busybox tar -jxvf busybox-1.1 ...
- zynq-7000移植linux操作系统
目录 1.u-boot 2.linux内核 3.devicetree.dtb 4.BOOT.bin 5.根文件系统 6.修改bootargs与bootcmd 7.相关网站 开发环境: vivado 2 ...
- 移植ubuntu14.04根文件系统至beaglebone开发板探索
移植ubuntu14.04根文件系统至BeagleBone开发板探索 移植背景 我是一个linux小白,然而由于项目需要,一个师兄为机器人的控制定制了一个开发板,基于beaglebone.由于此开发板 ...
- Exynos4412 移植针对Samsung的Linux-6.1(二)SD卡驱动——解决无法挂载SD卡的根文件系统
系列文章目录 Exynos4412 移植针对Samsung的Linux-6.1(一)下载.配置.编译Linux-6.1 Exynos4412 移植针对Samsung的Linux-6.1(二)SD卡驱动 ...
最新文章
- UVA1364 Knights of the Round Table(双连通分量、二分图染色,超详细解释)
- Tensorflow 源码安装成功,导入报错 ImportError: cannot import name 'build_info'
- 2019全球AI文创大赛正式启动,AI科技赋能新文创
- Windows环境下Android Studio系列5—日志调试
- Scala 写第一个程序HelloWorld
- 中国中医科学院大学落户苏州吴中区
- linux下设置java,Linux下设置java的环境变量
- django中的urlpatterns的正则语法
- JAVA中request.getParameterMap()用法笔记
- 前端开发~uni-app ·[项目-仿糗事百科] 学习笔记 ·004【App.vue引入全局公共样式】
- Mysql 基于 Amoeba 的 读写分离
- jquery知识点总结(转载)
- Navicat Premium 15 工具自动被杀毒防护软件删除解决方法
- 明解c语言 练习,《明解C语言》示例代码和练习代码[第8章]
- LittleVGL开发之显示中文字体以及矢量图标
- 项目管理体制改革的经验和成效(转)
- c# 微信公众号开发之自定义菜单栏
- 【图像分割】基于方向谷形检测实现静脉纹路分割附MATLAB代码
- 【python】os.path.exists(file_path) 存在的问题
- 如何添加和删除字段?