mini2440使用uboot(详细)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

mini2440使用uboot(详细)

文章出处:/swgshj/archive/2010/04/20/5502121.aspx

文章写于2010.4.17,总结了友善之臂的mini2440开发板使用自带uboot的具体方法,希望能对正在使用mini2440开发板,而且又想使用uboot引导系统的朋友们有所帮助。Google一下会发现网上类似的帖子不少,但是对mini2440开发板是哪一个版本都没有具体的说明,个人感觉mini2440开发板的版本是经常更新的,可能不同的版本的开发板在移植uboot时会稍有不同,因此这里我把自己使用的开发板的详细信息都罗列一下,希望网友少走弯路。

另外,要感谢illidan和Martin两位的文章:

/2009/05/mini2440使用u-boot/

/bbs/viewthread.php?tid=14

使用的mini2440开发板的详细信息:

kernel:linux-2.6.29-mini2440-20090708.tgz

gcc:arm-linux-gcc-4.3.2.tgz

uboot:bootloader.tgz(该压缩包内含有u-boot-1.1.6)

roots:root_qtopia-64M.img

问题源于:

(1)使用128M NAND Flash mini2440开发板的用户都知道,此时开发板附带的supervivi-64M和supervivi-128M都不再支持“空格”进入supervivi的menu菜单,而是改成了使用开发板上的k1~k6任何一个按键触发进入menu(而我需要空格键触发menu的方式);

(2)开发板附带的supervivi不支持网络下载kernel和root(文件系统)。

具体的修改步骤如下:

注1:arm-linux-gcc的安装方法见《mini2440-um-20090817.pdf》第5.3小节。

注2:mini2440开发板附带的uboot源码已经是经过移植的,适用s3c2440处理器,我们只需要修改一些uboot参数即可。

一、修改uboot源码

(1)解压出源码

创建工作目录

mkdir /tmp/workspace

cd /tmp/workspace

解压mini2440开发板光盘附带的uboot源码,bootloader.tgz同时包含了u-boot-1.1.6和vivi 的源码

tar -xvf bootloader.tgz

cd u-boot-1.1.6

(2)修改u-boot-1.1.6/include/configs/open24x0.h文件

修改NAND FLASH MTD分区表:

56 /*

57 #define MTDPARTS_DEFAULT "mtdparts=nandflash0:2m@0(kernel)," \

58 "8m(jffs2)," \

59 "-(yaffs)"

60 */

61 #define MTDPARTS_DEFAULT "mtdparts=nandflash0:" \

62 "256k@0(boot)," \

63 "64k(env)," \

64 "2m(kernel)," \

65 "-(yaffs)"

注:该分区表一定要与内核中的分区表一致,后面我会给出kernel中分区表的修改。

修改内核启动参数:

把“mtdblock2”改为“mtdblock3”

133 //#define CONFIG_BOOTARGS "noinitrd root=/dev/mtdblock2init=/linuxrc console=ttySAC0"

134 #define CONFIG_BOOTARGS "noinitrd root=/dev/mtdblock3init=/linuxrc console=ttySAC0"

注:此处一定要改,否则文件系统会加载失败(此处是让我最痛苦的地方,费了大量时间才找到这个症结所在)

修改env参数保存位置:

221 //#define CFG_ENV_IS_IN_FLASH 1

222 #define CFG_ENV_IS_IN_NAND 1

223 #define CFG_ENV_OFFSET 0x40000

224 #define CFG_ENV_SIZE 0x10000 /* Total Size of Environment Sector */

注1:env是uboot引导系统时用到的一系列参数,是可修改的,如果不改动此处,env修改后,即使执行saveenv命令,断电后也会丢失。

注2:注意一下223和224行,这两行定义了env保存在nand flash的具体位置,与MTD 分区表中的"64k(env)," 是对应的(64K=0x40000 - 0x10000)。

(3)修改u-boot-1.1.6/include/asm-arm/mach-types.h文件

修改machine ID

377 //#define MACH_TYPE_S3C2440 362

378 #define MACH_TYPE_S3C2440 1999

注1:查看linux-2.6.29/include/asm/mach-types.h会发现machine ID为1999

1985 #define MACH_TYPE_MINI2440 1999

注2:对于此处的修改Martin给出了他的经验:

“查看u-boot-1.1.6/board/open24×0/open24×0.c与linux-2.6.29/include/asm/mach-types.h,发现Machine ID果然设置的不对。mini2440的ID是1999,而u-boot中设置的是三星官方的362。改完,刷写,重启。

依然不灵。

这就有点土了。没有仿真器,没有打印信息,我和mini2440之间又不能通过脑电波交流…冥思苦想中,我进入了准无意识状态,大脑在迷惘,手指在不停地用NOR或者NAND启动mini2440。突然,我感到有什么东西不对。隐隐约约的,我似乎看到了什么东西,不应该出现的东西。定定神,一行一行地翻看串口console日志,貌似每一行都很正常,但最后我停在了SuperVIVI启动的一行语句上面:”Machine ID: 782″。

相关文档
最新文档