博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UBOOT1.3.1到S3C2440移植心得
阅读量:2455 次
发布时间:2019-05-10

本文共 2187 字,大约阅读时间需要 7 分钟。

  硬件:UTU2440-F的板子.S3C2440+NANDFLASH(K9F1208U0M)+64M SDRAM +CS8900
  自己移植1.3.3一直没有成功,于是网上发现tekkaman大侠已经移植了1.3.1,就拿来主义,
测试基本ok。又修改了一些简单东西, 同时对UBOOT的一些以前不理解的东西也加深了理解。
现在主要把自己对UBOOT的一些学习心得记录一下。
    不敢贪功,移植是tekkaman大侠做的(tekkman.cublog.cn),具体下载我这里就不提供了,
总之安装他的方法一定可以显示串 口,其他也基本没有什么问题。我把我的过程记录一下:
    1.编译后,默认是DM9000的网卡,所以无法用TFTP,我又重新编译了CS8900的,就没有
采用并口烧写了(那家伙真是太慢了),采用 loadb指令,通过串口下载,但是烧写到nand之后
启动不了,怀疑是网卡驱动问题,又反复查了不少资料,知道了网卡的片选对应地址是 0x19000000
并没有错啊,最后采用了直接并口烧写一次,之后串口显示正常。恭喜一下。
    2.通过网卡下载内核后执行不了。通tftp 0x30008000 uImage;bootm一直执行死机,不解
是何种原因,开始是显示 R1(机器代码为0x12000000)问题,后来就死机。怀疑内核问题,以为
要采用新的mkimage,更换新的UBOOT下面的 mkimage,仍然不行,后来偶然采用
tftp 0x32000000 uImage;bootm 0x32000000 竟然ok。
具 体原因和bootm的应用请参考《U-BOOT下使用bootm引导内核方法》
http://www.cnitblog.com/luofuchong/archive/2007/01/12/21834.html
 
    3.以前买开发板自带了一个UBOOT,也没有仔细看关于UBOOT的nandflash的分区情况。现在
要引导linux,把linux烧写 到一个位置之后,竟然不知道UBOOT在哪里设定分区,记得VIVI是有
设定的。又查了半天,据说UBOOT没有这个设定,仔细看,好像也确实这 样。终于明白,其实
可以通过Linux内核和UBOOT中间约定一下就可以了。
如:我的Linux中的分区如下:
struct mtd_partition bit_default_nand_part[] = {
[0] = {
.name = "bootloader",
.offset = 0x00000000, //其实UBOOT区域为:0---0x40000,0x40000---0x60000为参数区域。
.size = 0x00060000,
},
[1] = {
.name = "kernel",
.offset = 0x00060000,
.size = 0x00200000,
},
[2] = {
.name = "root",
.offset = 0x00260000,
.size = 0x03d90000, //0x03d9c000// 03ff0000后面有坏块
}
};
所 以我烧录的时候,就把kernel烧写到0x60000开始的位置,把root烧写到0x260000的位置就可以了。
但是如何自动让Linux 启动呢,目前还不知道。
这时候先讲一下CONFIG_BOOTARGS,CONFIG_BOOTCOMMAND.
CONFIG_BOOTARGS 是在启动Linux的时候传递给Linux内核的启动参数,如果没有的话,Linux就会用他自己的
默认参数。
CONFIG_BOOTCOMMAND 是UBOOT自动启动的时候执行的命令,大部分是BOOTM,不过如果想启动在nandflash中
的Linux,要先把Linux内核读出来, 然后执行bootm就可以。于是我采用如下配置:
#define CONFIG_BOOTARGS        "noinitrd root=/dev/mtdblock2 rootfstype=cramfs console=ttySAC0,115200"
#define CONFIG_BOOTCOMMAND    "nand read 0x32000000 0x60000 0x200000;bootm 0x32000000"
同时我定义了以下3个参数:
install-k=tftp 0x30008000 uImage;nand erase 0x60000 0x200000;nand write 0x30008000 0x60000 0x200000
install-b=tftp 0x30008000 u-boot.bin;nand erase 0x0 0x40000;nand  write 0x30008000 0x0 0x40000
install-f=tftp 0x30008000 filesystem;nand erase 0x260000;nand write 0x30008000 0x260000 0
更新的话, 直接run install-k就可以更新内核了,其他也如此。

 

转自:http://blog.chinaunix.net/u1/49088/showart_1074139.html

转载地址:http://yijhb.baihongyu.com/

你可能感兴趣的文章
异步JavaScript的演变:从回调到承诺,再到异步/等待
查看>>
自己写一个微型数据库_“最国际化的微型机构:”两名伦敦训练营的毕业生如何建造了一个远程…...
查看>>
测试驱动开发 测试前移_测试驱动开发简介
查看>>
css 网格布局_我从CSS网格布局中学到的东西
查看>>
快速了解Kubernetes微服务中的通信
查看>>
如何使您的Kotlin Android动画可访问
查看>>
github pages_使用GitHub Pages和Lighthouse增强您的开发人员产品组合
查看>>
JavaScript命名约定:注意事项
查看>>
html:漂亮的原生表格_HTML表格:关于它们的所有知识
查看>>
sqoop架构_SQOOP架构的深入介绍
查看>>
自行车车把会吧车刮坏吗_花10分钟即可开始使用车把
查看>>
在线学位课程_如何选择计算机科学学位课程
查看>>
React入门指南
查看>>
机器学习技术现状_教育技术如何颠覆传统学习的现状
查看>>
算法渐近性质分析_神奇宝贝解释的渐近分析:深入研究复杂性分析
查看>>
工厂用抽象类比接口_用简单的现实类比解释硬编码概念
查看>>
aws lambda使用_如何使用AWS Lambda和S3构建无服务器URL缩短器
查看>>
c专家编程/c陷阱_如何避免常见的初学者陷阱并像专家一样开始编码
查看>>
React模式:集中式PropTypes
查看>>
玻璃上的编码喜悦(+ 10史诗般的Epigrams)
查看>>