u-boot,linux,文件系统移植笔记1

  今天把u-boot,linux,yaffs2文件系统的移植全部搞定了,在我的mini2440板子上跑起来了,呵呵,兴奋啊!现在回头看看自己花了这么长时间所作的工作,结论就是,只要坚持下去就一定会成功的。

  下面就把我移植过程中的步骤记录下来,留着以后看看,也许还会用到的。

  先是u-boot部分:

  我用的是

               开发环境:fedora 14

                             开发板:mini2440  256M NandFlash   64M SDRAM

                             交叉编译器:arm-linux-gcc 4.4.3

                             BusyBox版本:busybox-1.7.0

                             yaffs制作工具:mkyaffsimage

                            yaffs2制作工具:mkyaffs2image(适合64M)、mkyaffs2image-128(适合128M以上,我的256M的用这个)

对于u-boot的修改有很多,参考了韦东山大神写的那本《嵌入式Linux应用开发完全手册》一步步做的,建议这部分大家也都自己动手做做,会有不少收获,对于那种文件的树形结构分布,程序设计的能力都会有很大的提高。

  当u-boot移植能够在板子跑了,在看下面内容:

  我一直困惑在MTD那部分,对于NAND flash分区那一直不是很清楚,先看我现在的mtd分区:

Creating 3 MTD partitions on "NAND 256MiB 3,3V 8-bit":

0x000000000000-0x000000500000 : "kernel"

0x000000500000-0x000000d00000 : "jffs2"

0x000000d00000-0x000010000000 : "yaffs"

我创建了3的分区,分别作为 uImage,jffs2,yaffs2文件存放的地址,在u-boot运行后,使用tftp下载kernel及文件系统到内存,接着写入flash中,具体如下:

tftp 0x31000000 uImage

nand erase 0 0x500000

nand write.jffs2 0x31000000 0 0x300000

  要注意的是,这里写到flash中的地址对应着我们的MTD分区表地址,我的0地址处存放的是kernel,所以下载到0地址处。

static struct mtd_partition friendly_arm_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,  }

};

这是之前的mtd分区,修改后如下:(在 arch/arm/mach-s3c2440/mach-mini2440.c中)

static struct mtd_partition friendly_arm_default_nand_part[] = {  

[0] = {   .name = "kernel",   .size = 0x00050000,   .offset = 0,  },  

[1] = {   .name = "jaffs",   .offset = MTDPART_OFS_APPEND,   .size = 0x00080000,  },

 [2] = {   .name = "yaffs",   .offset = MTDPART_OFS_APPEND,   .size = MTDPART_SIZ_FULL,  

}

};

当然在写入flash之前最后先下载到内存里跑一下,看能否运行,不然来回擦除flash太费事,而且也有损于它。

使用:

tftp 0x32000000 uImage bootm 0x32000000

看看能不能打印出这句:

Creating 3 MTD partitions on "NAND 256MiB 3,3V 8-bit":

0x000000000000-0x000000500000 : "kernel"

0x000000500000-0x000000d00000 : "jffs2"

0x000000d00000-0x000010000000 : "yaffs"

如果可以那说明这一步实现了。由于开发板上还没有写入文件系统,也没有设置nfs挂接网络文件系统,所以内核启动后还会出现panic信息。不急, 我们下一步来解决它。 在这之前,先解释一下几个概念:

1.uImage

使用 make uImage编译 我们编译linux结束后会在arch/arm/boot/目录下生成zImage,uImage内核文件,这有什么区别呢? 之前一直没有去研究他们,现在明白了,简单的说一下区别:  uImage是U-boot专用的映像文件,它是在zImage之前加上一个长度为0x40的tag。vmlinuz是bzImage/zImage文件的拷贝或指向bzImage/zImage的 链接。initrd是“initialramdisk”的简写。一般被用来临时的引导硬件到实际内核vmlinuz能够接管并继续引导的状态。 vmlinux是内核文件,zImage是一般情况下默认的压缩内核映像文件,压缩vmlinux,加上一段解压启动代码得到,只能从0X0地址运行。 uImage是u-boot使用bootm命令引导的Linux压缩内核映像文件格式,使用工具mkimage对普通的压缩内核映像文件(zImage)加工而得。 可以由bootm命令从任意地址解压启动内核。由于bootloader一般要占用0X0地址,所以,uImage相比zImage的好处就是可以和bootloader共存。 当我们使用ls -l 查看这两个文件大小时会发现,uImage比zImage大了64字节,也就是多了0x40长度的tag.

2.bootm

下载到内存后,使用bootm引导uImage,那为什么不用go命令呢? 原因是,我们上面所说的多出64字节的uImage,bootm你可以把它理解为专为它引导的命令。go命令是用来跳转的二进制可执行文件的命令。这些,我们 在mini2440裸机开发那想必大多数人都接触过,不再细说了!

3.MTDPART_OFS_APPEND

是代表着接着上一个分区地址向下分区,offset偏移。

4.MTDPART_SIZ_FULL flash

分区剩下的所有大小空间都分配出去。

 接着上面说的,写入flash后,保存引导参数。我这里是在u-boot中代码固定的。

#define CONFIG_BOOTDELAY 5

#define CONFIG_BOOTARGS     "noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0"

#define CONFIG_ETHADDR     08:00:3e:26:0a:5b

#define CONFIG_NETMASK      255.255.255.0

#define CONFIG_IPADDR  192.168.1.230

#define CONFIG_SERVERIP  192.168.1.10 /*#define CONFIG_BOOTFILE "elinos-lart" */

#define CONFIG_BOOTCOMMAND "nboot 0x31000000 0 0; bootm 0x31000000"

这样开机后,不打断便可进入kernel。

下一节介绍文件系统部分!

转载于:https://www.cnblogs.com/my-life/p/3486073.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/575641.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android限制安装包来源,Android系统设置settings应用学习(一)--允许未知来源应用安装...

settings,是Android系统应用--设置的源代码,包名称为:com.android.settings安全设置代码:SecuritySettings.java/** Copyright (C) 2007 The Android Open Source Project** Licensed under the Apache License, Version 2.0 (the…

浏览器与服务器响应流程-----(转)

一. 解析域名地址为IP地址 浏览器DNS缓存:以Chrome为例,在浏览器窗口中输入chrome://net-internals/#dns,就可以查看当前浏览器DNS缓存记录,chrome的DNS缓存过期时间还是比较短的,大约为1分钟。 本机DNS缓存&#xff1…

android关键应用程序,Android应用程序的四个关键点

对于一个Android应用程序来说,是由四种关键构造块组织而成的,这四种构造块分别是:Activity、Intent Receiver、Service、Content Provider但是,并不是每一个Android应用程序都需要这四种构造块,这不是必须的&#xff0…

手把手教你使用FineUI开发一个b/s结构的取送货管理信息系统(附源码+视频教程(第6节))...

一 本系列随笔概览及产生的背景 近阶段接到一些b/s类型的软件项目,但是团队成员之前大部分没有这方面的开发经验,于是自己选择了一套目前网上比较容易上手的开发框架(FineUI),计划录制一套视频讲座,来讲解如…

Pc-98 android,PC安卓多功能搞机助手3.98

V3.98版本更新日志:1.全新多设备检测机制,底层代码重写;2.新增支持检测安卓用户是否允许当前电脑调试设备;3.软件冻结#卸载中新增清除指定应用数据;4.小米线刷检测功能优化,修复之前版本不能正确识别设备是…

拼接路径的两种方式

//本文永久链接,转载请注明出处:http://www.cnblogs.com/ChenYilong/p/3490669.html https://www.evernote.com/shard/s227/sh/1401e497-899e-4b04-9ff6-e1d9638e9f25/f6b722ed5cb2c5f603a9b242ee7fe230转载于:https://www.cnblogs.com/ChenYilong/p/3490669.html

android像素鸟,像素鸟Flappy Bird

Flappy Bird是最近非常热门的一款像素游戏,Flappy Bird 的游戏规则异常简单:和Frogmind Games的成名作品BADLAND类似,玩家只需要点击屏幕就可以操作游戏,控制角色通过各种障碍。看似简单的规则下是让人抓狂的游戏难度。首先&#…

Android是什么 之三手机之硬件形态

手机硬件形态  本节可能与Android无关,但是Android系统现在这个阶段更多的是移动终端形态的开发平台,本节给出了Android背后的工作-Android管理的硬件是什么,Android的本质就是要管理好这些硬件部分,为用户提供一个体验更好&…

Android CPU 深度睡眠,处理器的深度和深度睡眠状态之间的差异

深度睡眠(C3)和深度睡眠(C4)是用于描述移动平台电源管理的术语。电源管理就是通过将 CPU 置于不使用状态时休眠来延长电池续航时间。C3 深度睡眠和 C4 深度睡眠是 ACPI 电源管理状态。更深的睡眠源自 CPU 和芯片组交互的改进,以重定向 snoop 周期。CPU 的深度 C4 状…

品味性能之道十一:JAVA中switch和if性能比较

通常而言大家普遍的认知里switch case的效率高于if else。根据我的理解而言switch的查找类似于二叉树,if则是线性查找。按照此逻辑推理对于对比条件数目大于3时switch更优,并且对比条件数目越多时switch的优势越为明显。一、测试目的最近与开发同学对于前…

miniblink载入html,winform使用miniblink展示html(全屏)

【实例简介】使用miniblink 展示html的例子,miniblink基于chromium的浏览器控件【实例截图】点击下图中的百度,即可 实现全屏访问 百度网页 ,如下图:其实是winform嵌入的这个网页,打开即是 全屏效果【核心代码】using …

javax.imageio.IIOException: Unsupported Image Type

把图片的模式用ps从CMYK转为RGB就ok了。 CMYK也称作印刷色彩模式,是一种依靠反光的色彩模式,和RGB类似,CMY是3种印刷油墨名称的首字母:青色Cyan、品红色Magenta、黄色Yellow。而K取的是black最后一个字母,之所以不取首…

html 手机访问优化,移动端首屏优化

[TOC]## 页面加载为什么打开一个 H5 页面会有一长段白屏时间?因为它做了很多事情,大概是:~~~初始化 webview -> 请求页面 -> 下载数据 -> 解析HTML -> 请求 js/css 资源 -> dom 渲染 -> 解析 JS 执行 -> JS 请求数据 -&…

2014年10月末

迄今,我的第一个目标已达到。接下来就要为第二个目标做准备了,而且是长期,不可松懈的准备。大体上计划用10个月吧! 2014年,10月末,到时给出一个结果!转载于:https://www.cnblogs.com/zhangyabin…

html5 indexeddb 排序,html5 – 在IndexedDB中,有没有办法进行排序复合查询?

本回答中使用的术语“复合查询”是指在其WHERE子句中涉及多个条件的SQL SELECT语句。虽然indexedDB规范中没有提到这样的查询,但您可以通过创建一个包含一组属性名称的keypath的索引来近似复合查询的行为。这与创建索引时使用多条目标志完全无关。多条目标志调整ind…

Spark源码分析 -- SchedulableBuilder

SchedulableBuilder就是对Scheduleable tree的封装, 在Pool层面(中间节点), 完成对TaskSet的调度(FIFO, FAIR) 在TaskSetManager 层面(叶子节点), 完成对TaskSet中task的调度(locality)以及track(retry) TaskSetManager 用于封装TaskSet, 主要提供对单个TaskSet内部的tasks的t…

html设置照片模糊效果,CSS如何实现照片模糊?

在开发网页时,照片模糊处理会经常被使用,比如当我们背景图的模糊,当我们不想背景图片过于突出影响美观时,就可以设置将照片模糊处理,突出文字部分。那么 CSS 如何实现照片模糊呢?这篇文章 w3cschool 小编告…

rhel6用centos163 yum源

cd /etc/yum.repos.d/wget wget http://mirrors.163.com/.help/CentOS6-Base-163.reposed -i "s/\$releasever/6/" CentOS6-Base-163.repo 转载于:https://www.cnblogs.com/yanghuahui/p/3507313.html

女生学计算机未来出路,计算机真的已经烂大街了吗,女生学计算机没出路吗?...

假的。先说第一个问题:情况是,现在程序员是很多,但多半是中低端程序员,高端程序员供不应求,薪资一涨再涨。现在的程序员门槛一高再高,就是为了淘汰掉那些半吊子的程序员。如果你是靠从网上复制粘贴代码的“…

简明易懂的call apply

在iteye看到一篇对call解释得相当简明易懂,觉得得宣传一下 : http://uule.iteye.com/blog/1158829 一、方法的定义 call方法: 语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]]) 定义:调用一个对象的一个方法,以另一…