mini2440用j-link-armuboot tftp 烧写内核uboot怎么连接线

【转】记录一下自己在mini2440上面&使用uboot的曲折的经历。
记录一下自己在mini2440上面
使用uboot的曲折的经历。
首先是使用了买板子时自带的代码:
u-boot-1.1.6。但是编译时,总是提示有错误。也不知道这个版本是不是tekk的那个版本,自己修改了一些地方,但是感觉uboot的编译体系与一般的开源软件不相同,编译时,总是提示
有函数的实现找不到,即undefined reference to _,,,,网上说需要在makefile中添加
nostdlib等选项,但依然无法编译通过。
后来下载了
tekk的版本,貌似大家用的都是他的版本。
先说一下supervivi和uboot的区别。
在mini2440在norflash中烧写的是supervivi,supervivi使用起来非常方便,但是supervivi有一个缺点是
不支持从nfs启动,虽然它支持将nfs的根文件系统启动,但是不支持nfs的内核启动。也就是说将根文件系统放在nfs服务器上是可以的,但是supervivi不支持将编译好的内核放在nfs服务器上。
通常来讲,我们在做驱动等开发时候,其实有很多时候是需要修改内核,然后重新编译的。因此,如果使用supervivi就需要
配合dnw烧写内核。这个其实不太方便。
个人觉得uboot比supervivi的优势就在这里,就是uboot支持加载nfs服务器上的内核,这样的话,每次我们修改内核之后,就不需要用dnw进行烧写了,uboot会自动帮我们完成这个工作。因此我决定
编译uboot,并烧写到nandflash,而在norflash中保留了 supervivi。
另外,supervivi和uboot支持的内核格式是不相同的。用supervivi烧写内核时,烧写的是zImage文件,而用uboot烧写时经过处理后的image文件:zImage.img,这个文件与zImage相比是多了一个文件头部,是zImage文件经过uboot的mkimage工具而生成的。所以,supervivi和uboot不能加载相同的内核文件。
我是从这个链接下载的uboot代码:。&为此还研究了github的使用方法,现在依然没有弄清楚怎么样在github上面搜索开源的代码,搜索好像没有sourceforge作得那么直观。目前一直想找找内核方面的项目做,但是自己没有合适的项目。希望看到博客的盆友们可以给推荐几个。
下载之后,放在虚拟机中解压,并编译,代码需要放在linux自己的磁盘中,而不能是共享的windows的磁盘。编译前需要修改Makefile,将变量CrossCompile设置为arm-linux-。
编译uboot的指令如下: make mini2440_ make。
需要先修改crosscompile变量,然后在进行编译,否则会出错。
编译完成之后,就可以用supervivi进行烧写,然后测试了。
在用uboot的过程中,主要解决了两个问题:
uboot的环境变量不能保存的问题。在uboot的界面中用setenv
和saveenv可以修改环境变量。因为tekk将环境变量设置为从nfs启动,而且ip地址都是hardcode在代码中的,因此,需要在uboot中修改这些环境变量。结果每次修改完之后,发现在启动系统时,都会出现&bad
CRC or NAND, using default environment
这样的提示,也就是说修改之后的环境变量并没有起作用。
经过认真分析
flash的分区,在mini2440的linux内核代码中,flash的分区表在文件mach-mini2440.c中,;
static struct mtd_partition
mini2440_default_nand_part[] = {&
&&&&&&&&&&&&&&&
.name&& = "supervivi", ;这里是
bootloader 所在的分区,可以放置 u-boot, supervivi 等内容,对应
/dev/mtdblock0&
&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&
.offset = 0,&
&&&&&&&&&&&&&&&
.name&& = "param", ;这里是 supervivi
的参数区,其实也属于 bootloader 的一部分,如果 u-boot 比较
大,可以把此区域覆盖掉,不会影响系统启动,对应/dev/mtdblock1&
&&&&&&&&&&&&&&&
.offset = 0x,&
&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&
"Kernel",& ;内核所在的分区,大小为
5M,足够放下大部分自己定制的巨型内核了,比如内核
使用了更大的 Linux Logo 图片等,对应/dev/mtdblock2&
&&&&&&&&&&&&&&&
.offset = 0x,&
&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&
.name&& = "root",
;文件系统分区,友善之臂主要用来存放 yaffs2 文件系统内容,对应/dev/mtdblock3
&&&&&&&&&&&&&&&
.offset = 0x,&
&&&&&&&&&&&&&&&
.size&& = 1024 * 1024 * 1024,
&&&&&&&&&&&&&&&
.name&& = "nand", ;此区域代表了整片的 nand
flash,主要是预留使用,比如以后可以通过应用程序访
问读取/dev/mtdblock4 就能实现备份整片 nand flash 了。&
&&&&&&&&&&&&&&&
.offset = 0x,&
&&&&&&&&&&&&&&&
.size&& = 1024 * 1024 * 1024,
显然,我们的uboot的环境变量应该放在param分区中,即从0x40000 到
0x60000的这个部分。然后我们去uboot的代码中,有保存环境变量的位置,在文件include/configs/mini2440.h中:#define
CONFIG_ENV_OFFSET
0x60000。从这里我们可以看到环境变量与linuxkernel的位置重叠了,所以导致加载环境变量有错误。为此,我们需要修改这里:#define
CONFIG_ENV_OFFSET 0x60000。修改之后,编译,并重新下载,我们发现环境变量可以保存了。
2. 下面列一下我的环境变量的设置:
如果从nandflash启动系统:
[u-boot@MINI2440]# printenv
bootargs=noinitrd root=/dev/mtdblock3 init=/linuxrc
console=ttySAC0,115200
bootcmd=nboot
0x60000;bootm
bootdelay=1
baudrate=115200
ethaddr=08:08:11:18:12:27
ipaddr=192.168.17.135
serverip=192.168.17.1
gatewayip=192.168.17.1
netmask=255.255.255.0
stdin=serial
stdout=serial
stderr=serial
ethact=dm9000
tekkaman=hello wusq
如果是从nfs启动系统:
bootargs=noinitrd root=/dev/mtdblock3 init=/linuxrc
console=ttySAC0,115200
bootdelay=1
baudrate=115200
ethaddr=08:08:11:18:12:27
ipaddr=192.168.17.135
serverip=192.168.17.1
gatewayip=192.168.17.1
netmask=255.255.255.0
stdin=serial
stdout=serial
stderr=serial
ethact=dm9000
tekkaman=hello wusq
bootcmd=nfs 0x
192.168.17.2:/opt/FriendlyARM/mini2440/linux-2.6.32.2/zImage.
如果要加载nfs上面的root文件系统,那么还需要修改bootargs:
类似于下面这样
bootargs=noinitrd root=/dev/nfs rw
nfsroot=192.168.0.1:/home/tekkaman/working/nfs/rootfs&
ip=192.168.0.2:192.168.0.1::255.255.255.0
console=ttySAC0,115200 init=/linuxrc mem=64M
最后一个问题,是解决了怎么样关闭uboot启动时,蜂鸣器发出声音的问题,是参考的网上的办法:http://www.arm9home.net/read.php?tid-4735-fpage-6.html
在这个版本中有两处设定了U-boot启动的时候蜂鸣器响,
第一个地方是在:
board\mini2440\mini2440.c这个文件,
#if defined(CONFIG_MINI2440_LED)
&&&&&&&&gpio-&GPBDAT
第二个地方是lib_arm\board.c的display_banner 函数:
defined(CONFIG_MINI2440_LED)&&&&&
&&&&&&&&S3C24X0_GPIO
* const gpio = S3C24X0_GetBase_GPIO();
&&&&&&&&gpio-&GPBDAT
= 0x101; //tekkamanninja
解决办法:
步骤一:修改第一个地方的board\mini2440\mini2440.c文件:
#if defined(CONFIG_MINI2440_LED)
&&&&&&&&gpio-&GPBDAT
步骤二:再检查文件中的start_armboot函数,是否存在如下代码:
defined(CONFIG_MINI2440_LED)&&&&&
&&&&&&&&gpio-&GPBDAT
= 0x0; //tekkamanninja
这样就是U-boot系统启动的时候蜂鸣器响一会,启动结束停止,就不会出现长鸣现象了。
如果不想蜂鸣器响,将lib_arm\board.c的display_banner 函数中的:
defined(CONFIG_MINI2440_LED)&&&&&
&&&&&&&&S3C24X0_GPIO
* const gpio = S3C24X0_GetBase_GPIO();
&&&&&&&&gpio-&GPBDAT
= 0x101; //tekkamanninja
defined(CONFIG_MINI2440_LED)&&&&&
&&&&&&&&S3C24X0_GPIO
* const gpio = S3C24X0_GetBase_GPIO();
&&&&&&&&gpio-&GPBDAT
= 0x100; //tekkamanninja
这样,就可以用uboot引导内核了。哈哈
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。查看: 1261|回复: 0
求解~用Jlink烧写uboot至mini2440的nor flash,串口终端无任何显示
本帖最后由 tianming 于
12:37 编辑
=====下面这段是从网上拷贝的========================================================
我自己有一个Mini2440的板子,我学习了Bootloader这一节,想做一下实验。
& & 很可惜,我只有笔记本电脑,不带并口的。不过我有一个JLinkV8,听网友们说可以有它来下载程序。
& & 网上有不少的文章讲如何使用JLink烧程序到Mini2440,我总结了一下,主要的步聚如下:
& & (1)下载init.bin文件,并运行。它能将SDRAM配置好。
& & (2)下载u-boot.bin文件到SDRAM内存地址上,并运行它。
& & (3)使用u-boot命令将自身写到NandFlash或NorFlah。
& & 首先要安装JLink驱动,然后就是正确的连线,最后是给Mini2440上电。
打开J-Link Commander。
& & 以上显示,是正常连接的。
& & 我在网上下载了一个init.bin文件。& &init.zip&&提取其init.bin文件。
& & 下面我简单讲一下,我用到的几个jlink命令:
r -- reset, 复位命令
h -- halt, 停机,也有暂停的功能
loadbin &filename& &address& -- 下载filename文件到地址上address
setpc &address& -- 设置PC的值
在执行J-Link命令之前,先执行:
& &&&& speed 12000
& &&&提高通信速度,不然后面下载程序会很慢。
(1)下载init.bin文件,在J-Link Commander执行以下命令:
& &&&& loadbin e:\init.bin 0x
& &&&& setpc 0x
& &&&执行完上述命令之后,我们的目标板就从0x地址上开始执行。如果看到Mini2440板子上的4个LED开始闪烁,那就说明init.bin程序在目标板中运行起来了。
& &&&这里我有一个问题,为什么要下载到0x地址上呢?既然不是SDRAM,这个地址上是什么存储器?请大师解答
(2)然后下载我们的u-boot.bin文件到SDRAM中进行运行。
& &&&& loadbin e:\u-boot.bin 0x33f80000
& &&&& setpc 0x33f80000
& &&&这里我说明一下为什么是0x33f80000,因为在U-Boot中已定义了U-Boot终端是运行在这个地址。执行完J-Link命令之后,我们就听到一声蜂鸣器声,并可以在Mini2440连出来的串口终端上看到U-Boot输出的信息:
& &&&这已说明刚下载的U-Boot已经运行起来了。
==============================结束======================================================
我按照上面的说明去做,前面几步都没有问题,但是在听到一声蜂鸣器响声之后,再无任何反应了,串口终端没有任何显示信息。我的板子也是mini2440
希望大家帮忙解答一下,非常感谢~~~
阿莫电子论坛, 原"中国电子开发网"今天看啥 热点:
mini2440使用jlink烧写superboot到norflash,jlinksuperboot
Jlink版本:J-flash ARM V4.12 & & & & & & & & &&
J-Flash ARM的配置。
一般说来file--&open project里面会找到一些*.jflash的配置文件,加载他们就行了,但是没找到适合S3C2440的。所以自己建了一个mini2440.jflash,手动进行配置:
j-link设置
1. 打开J-Flash ARM,并进入菜单:Options--&Project settings
2.主要设置CPU选项和Flash选项
Core --& ARM9, Little endian
Use target RAM(faster)--&Addr:KB(不选很慢;从Nor flash启动时内部Boot SRAM的地址和大小,参考S3C2440A的芯片手册)
初始化序列(Init sequence)按下面的填,简单做了下注释。
##-------Action-----Value0------Value1
1) &Disable MMU
2) &Write 32bit 0xx ; pWTCON , 看门狗定时器控制寄存器
3) &Write 32bit 0x4AxFFFFFFFF ; INTMSK , 中断屏蔽寄存器
4) &Write 32bit 0x4A0007FF ; INTSUBMSK , 针对INTMAK具体化的一个中断请求屏蔽寄存器
5) &Write 32bit 0xx ; pWTCON , 看门狗定时器控制寄存器
6) &Write 32bit 0xx000055AA ; rGPFCON , Port F control
7) &Write 32bit 0x4Cx ; CLKDIVN , CPU时钟分频控制寄存器
8) &Write 32bit 0x4Cx00FFFFFF ; LOCKTIME , 锁时计数寄存器
9) &Write 32bit 0x4Cx ; MPLLCON , MPLL寄存器
10) Write 32bit 0x4Cx ; UPLLCON , UPLL寄存器
11) Write 32bit 0xx ; Bus width & wait status
12) &Write 32bit 0xx00002F50 ; Boot ROM control
13) &Write 32bit 0xx ; BANK1 control
14) Write 32bit 0xx ; BANK2 control
15) Write 32bit 0xx ; BANK3 control
16) Write 32bit 0xx ; BANK4 control
17) Write 32bit 0xx0007FFFC ; BANK5 control
18) Write 32bit 0xx ; BANK6 control
19) Write 32bit 0xx ; BANK7 control
20) Write 32bit 0xx008E0459 ; DRAM/SDRAM refresh
21) Write 32bit 0xx ; Flexible Bank Size
22) Write 32bit 0xx ; Mode register set for SDRAM
23) Write 32bit 0xx ; Mode register set for SDRAM&
取消&Automatically detect flash memory&,然后&Select Flash Device&。
mini2440的Flash型号是:AM29LV160DB或SST39VF1601,选中之后不要改写任何数值。
如果没有对应Flash型号,选中Automatically detect flash memory
4. 烧写.bin文件(若二进制文件扩展名不是.bin改成xxx.bin即可)
1)打开.bin文件(bootloader):File -&Open data file
2)Target -& Connect
3)Target -&Erase chip
4)Target -& Program
连接USB接口时必须把Jlink的线拔掉,否则minitools连接不上开发板
你知识下载了Uboot或supervivi吧,再把kernel和根文件加载进去就可以了推荐先用Jlink把supervivi烧写到NorFlash中,然后在NorFlash下启动开发板,在超级终端中先输入f擦除NAND的数据,然后依次v烧写supervivi到NAND,k烧写内核,根据屏幕上W35或X35选择内核,然后输入y烧写QT4的根文件,烧写用DNW工具,这样就可以在NAND下启动看到小企鹅了,建议详细阅读mini2440手册
也算是一种实验吧。mini2440有两种启动方式,一种是Nor启动,一种是Nand启动。无论是哪一种启动方式都需要BootLoader,这里说的BootLoader就是Supervivi和Uboot了,关于Bootloader重要性,网上有很多资料,我就不再重复了。PS:Supervivi比较适合初学者使用,Uboot则是更加灵活,提供TFTP、NFS、串口等下载方式。
相关搜索:
相关阅读:
相关频道:
Android教程最近更新1 Pages: 1/3& & &Go
主题 : mini2440使用uboot(详细)
水滴石穿,绳锯木断
级别: 新手上路
金钱: 15 两
威望: 3 点
贡献值: 0 点
综合积分: 6 分
&mini2440使用uboot(详细)
管理提醒:
本帖被 kasim 执行加亮操作()
文章写于,总结了友善之臂的mini2440开发板使用自带uboot的具体方法,希望能对正在使用mini2440开发板,而且又想使用uboot引导系统的朋友们有所帮助。Google一下会发现网上类似的帖子不少,但是对mini2440开发板是哪一个版本都没有具体的说明,个人感觉mini2440开发板的版本是经常更新的,可能不同的版本的开发板在移植uboot时会稍有不同,因此这里我把自己使用的开发板的详细信息都罗列一下,希望网友少走弯路。另外,要感谢illidan和Martin两位的文章:使用的mini2440开发板的详细信息:kernel:linux-2.6.29-mini8.tgzgcc:arm-linux-gcc-4.3.2.tgzuboot:bootloader.tgz(该压缩包内含有u-boot-1.1.6)roots:root_qtopia-64M.img注:我的nand flash由原来的128M换成了64M。问题源于:(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-.pdf》第5.3小节。注2:mini2440开发板附带的uboot源码已经是经过移植的,适用s3c2440处理器,我们只需要修改一些uboot参数即可。一、修改uboot源码(1)解压出源码创建工作目录mkdir /tmp/workspacecd /tmp/workspace解压mini2440开发板光盘附带的uboot源码,bootloader.tgz同时包含了u-boot-1.1.6和vivi的源码tar -xvf bootloader.tgzcd 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/mtdblock2 init=/linuxrc console=ttySAC0&134 #define CONFIG_BOOTARGS         &noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0&注:此处一定要改,否则文件系统会加载失败(此处是让我最痛苦的地方,费了大量时间才找到这个症结所在)修改env参数保存位置:221 //#define       CFG_ENV_IS_IN_FLASH     1222 #define CFG_ENV_IS_IN_NAND  1223 #define CFG_ENV_OFFSET          0x40000224 #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_S3C;             362 378 #define MACH_TYPE_S3C;             1999注1:查看linux-2.6.29/include/asm/mach-types.h会发现machine ID为1999 1985 #define MACH_TYPE_MINI;            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″。782?为什么会是782?我grep了一下linux-2.6.29/include/asm/mach-types.h,782是MACH_TYPE_PNX4008。先不想那么多,改成782试试。改完,刷写,重启。Kernel成功启动了。回过头研究782,不由哑然失笑。原来是这个linux-2.6.29移植的有点潦草,defconfig中的宏定义前后不一致,使得Machine ID没有设置为预想的值。好吧,这个问题就留在这里吧,也是一种不和谐美。”注3:Martin用的可能是较老的mini2440开发板,我这一版已经解决了他提的这个问题,如果跟我的kernel一样,应该改为1999。(4)修改uboot功能菜单,增加tftp下载功能选项修改u-boot-1.1.6/common/cmd_menu.c文件,在原文件中添加146~149行:142 void main_menu_usage(void)143 {144     printf(&\r\n##### uboot for mini2440 #####\r\n&);145 146     printf(&[1] TFTP Install U-boot\r\n&);147     printf(&[2] TFTP Install Linux kernel\r\n&);148     printf(&[3] TFTP Install JFFS2 root\r\n&);149     printf(&[4] TFTP Install YAFFS root\r\n&);150     printf(& Download u-boot\r\n&);151 152 #ifdef CONFIG_SURPORT_WINCE153         printf(&[e] Download Eboot\r\n&);154 #endif155     printf(&[k] Download Linux kernel\r\n&);156 #ifdef CONFIG_SURPORT_WINCE157     printf(&[w] Download WinCE NK.bin\r\n&);158 #endif159     printf(&[j] Download JFFS2 image\r\n&);160     printf(&[y] Download YAFFS image\r\n&);161     printf(&[d] Download to SDRAM & Run\r\n&);162     printf(& Boot the system\r\n&);163     printf(&[f] Format the Nand Flash\r\n&);164     printf(&[s] Set the boot parameters\r\n&);165     printf(&[r] Reboot u-boot\r\n&);166     printf(&[q] Quit from menu\r\n&);167     printf(&Enter your selection: &);168 }在原文件menu_shell函数中添加200~235行171 void menu_shell(void)172 {173    174     char cmd_buf[200];175     char *p = NULL;176    177     178     struct mtd_info *mtd = &nand_info[nand_curr_device];179 180     while (1)181     {182         main_menu_usage();183         c = awaitkey(-1, NULL);184         printf(&%c\n&, c);185         switch (c)186         {187             case 'u':188             {189                 if (bBootFrmNORFlash())190                 {191                     strcpy(cmd_buf, &usbslave 1 0x; erase 0 +$(filesize); cp.b 0x $(filesize)&);192                 }193                 else194                 {195                     strcpy(cmd_buf, &usbslave 1 0x; nand write.jffs2 0x bios $(filesize)&);196                 }197                 run_command(cmd_buf, 0);198                199             }200             case '1':201             {202                 if (bBootFrmNORFlash())203                 {204                     strcpy(cmd_buf, &tftp 0x u-boot. erase 0 +$(filesize); cp.b 0x $(filesize)&);205                 }206                 else207                 {208                     strcpy(cmd_buf, &tftp 0x u-boot. nand write.jffs2 0x boot $(filesize)&);209                 }210                 run_command(cmd_buf, 0);211                212             }213             case '2':214             {215                 strcpy(cmd_buf, &tftp 0x uI nand write.jffs2 0x kernel $(filesize)&);216                 run_command(cmd_buf, 0);217 #ifdef CONFIG_SURPORT_WINCE218                 if (!TOC_Read())219                     TOC_Erase();220 #endif221                222             }223             case '3':224             {225                 strcpy(cmd_buf, &tftp 0x rootfs.jffs2; nand erase jffs2; nand write.jffs2 0x jffs2 $(filesize)&);226                 run_command(cmd_buf, 0);227                228             }229 230             case '4':231             {232                 strcpy(cmd_buf, &tftp 0x rootfs. nand write.yaffs 0x yaffs $(filesize)&);233                 run_command(cmd_buf, 0);234                235             }236 237 #ifdef CONFIG_SURPORT_WINCE238             case 'e':239             {240                 offset = EBOOT_BLOCK * mtd-&241                 size   = EBOOT_BLOCK_SIZE * mtd-&242                 sprintf(cmd_buf, &nand erase 0x%x 0x%x; usbslave 1 0x; nand write 0xx%x $(filesize)&, offset, size, offset);243                 run_command(cmd_buf, 0);244                245             }246 #endif247 248             case 'k':249             {250                 strcpy(cmd_buf, &usbslave 1 0x; nand write.jffs2 0x kernel $(filesize)&);251                 run_command(cmd_buf, 0);252 #ifdef CONFIG_SURPORT_WINCE253                 if (!TOC_Read())254                     TOC_Erase();255 #endif256                257             }(5)重新编译cd /tmp/workspace/u-boot-1.1.6make cleanmake distcleanmake编译完成后会在tmp/workspace/u-boot-1.1.6目录下发现u-boot.bin文件,即是我们需要的uboot镜像文件。(6)安装mkimag工具cp /tmp/workspace/u-boot-1.1.6/tools/mkimage /usr/sbin注:该工具必须安装,后面编译内核要用到。因为,uboot不支持zImage格式,我们需要mkiamge将内核编译成uImage格式。二、修改kernel源码(1)解压源码cd /tmp/workspacetar -xvf linux-2.6.29-mini8.tgzcd linux-2.6.29(2)修改inux-2.6.29/arch/arm/plat-s3c24xx/common-friendly-arm.c文件cd  /tmp/workspace/inux-2.6.29 49 /* 50 static struct mtd_partition friendly_arm_default_nand_part[] = { 51         [0] = { 52                 .name   = &supervivi&, 53                 .size   = 0x, 54                 .offset = 0, 55         }, 56         [1] = { 57                 .name   = &Kernel&, 58                 .offset = 0x, 59                 .size   = 0x, 60         }, 61         [2] = { 62                 .name   = &root&, 63                 .offset = 0x, 64                 .size   = 1024 * 1024 * 1024, //64U * 1024 * 1024 - 0x, 65         }, 66         [3] = { 67                 .name   = &nand&, 68                 .offset = 0x, 69                 .size   = 1024 * 1024 * 1024, //64U * 1024 * 1024 - 0x, 70         } 71 }; 72 */ 73 //modified by sunny,
13:24 74 static struct mtd_partition friendly_arm_default_nand_part[] = { 75         [0] = { 76                 .name   = &boot&, 77                 .size   = 0x, 78                 .offset = 0, 79         }, 80         [1] = { 81                 .name   = &env&, 82                 .offset = 0x, 83                 .size   = 0x, 84         }, 85         [2] = { 86                 .name   = &kernel&, 87                 .offset = 0x, 88                 .size   = 0x, //64U * 1024 * 1024 - 0x, 89         }, 90         [3] = { 91                 .name   = &root&, 92                 .offset = 0x, 93                 .size   = 0x03db0000, //64U * 1024 * 1024 - 0x, 94         } 95 };注:该分区表是与u-boot-1.1.6/include/configs/open24x0.h文件对应的,自己可以研究一下。(3)重新编译内核,详细见《mini2440-um-.pdf》第六章  定制 Linux 内核及制作文件系统cd /tmp/workspace/linux-2.6.29cp config_mini2440_t35 .configmake uIamge注1:注意是make uImage而不是zImage了,编译uImage也会生成zImage,生成的位置仍然在 /tmp/workspace/linux-2.6.29/arch/arm/boot/注2:此处需要根据自己实际用的开发板选择,我用的开发板带的是T35的显示屏,因此选用onfig_mini2440_t35三、安装tftpserver工具到xp(1)将mini2440光盘中带的tftpd32拷贝到自己的PC上,具体位置在&windows平台工具\tftpboot&,整个目录都拷贝下来,放在任何地方皆可。(2)打开tftpd32.exe,设置一下“Current Directory”,选择你要存放u-boot.bin,uImage,rootfs.yaffs的目录(假设为C:\Program Files\tftpboot\download)。(3)“Server Interface”选择你的网口的IP(假设ip地址为192.168.1.10)。(4)单击“Show Dir”,如果能看到C:\Program Files\tftpboot\download目录下的文件,则说明你的tftpd设置成功。注1:root_yaffs实际为mini2440带的root镜像文件(root_qtopia-64M.img或root_qtopia-128M.img)注2:这三个镜像文件的名字必须为u-boot.bin(uboot),uImage(内核),rootfs.yaffs(文件系统),这与uboot的功能菜单程序有关。四、烧写u-boot.bin,uImage,root_yaffs(1)用网线将pc和开发板连接,将u-boot.bin,uImage,rootfs.yaffs镜像文件拷贝到C:\Program Files\tftpboot\download目录。(2)烧写u-boot.bin对于该文件的烧写你可以直接用norflash带的supervivi烧写(用【a】选项即可);也可以用jtag电缆从并口烧写。烧写完u-boot.bin后,从nand flash启动,发现uboot启动后,按下空格键进入uboot功能菜单;进入uboot功能菜单后,按下空格键,进入uboot命令窗口;输入printenv命令,可显示当前的env设置;发现serverip=192.168.1.1,更改为192.168.1.10(因为你的PC当前的ip为192.168.1.10),输入下面的命令:setenv serverip 192.168.1.10saveenv或者你也可以改变自己pc的ip为192.168.1.1输入menu命令重新回到uboot功能菜单按下1键重新下载u-boot.bin到nand flash(也可以不用重新下载)(3)烧写kernel在uboot功能菜单按下2键下载uImage到nand flash(4)烧写root_yaffs在uboot功能菜单按下4键下载root_yaffs到nand flash注:开始我下载的时候,PC机与mini2440开发板是通过交换机连接的,下载uImage和u-boot.bin都没问题,但是下载root_yaffs是总是会出现crc error提示,后来用一根网线直连的方式下载时,crc error消失,可能是我的交换机不好吧,如果大家用交换机时也出现这个问题,我们共同讨论一下。终于写完了,写的比较匆忙,如有错误还望大家指正![ 此帖被sunny9-04-19 18:50重新编辑 ]
我分享,我快乐!
自由,自强,共享,共创。
级别: 论坛版主
发帖: 8881
金钱: 46490 两
威望: 9298 点
贡献值: 27 点
综合积分: 18302 分
很好,多谢分享,我们最近也会出一个u-boot移植手册,是基于tekkaman所做的移植。注意本论坛的更新信息。
新手如何向我们反馈有效的信息,以便解决问题,见此贴: [注]: 此处签名链接仅为指引方向,而非解答问题本身.
级别: 侠客
金钱: 500 两
威望: 100 点
贡献值: 0 点
综合积分: 192 分
楼主你好:&&&&我的板是MINIM NAND 64M NOR)&& 今天按归上述方法在更改,在SUPERVIVI下,用[a] 下载至NAND 中,启动后串口无输出。这是第一个问题。&& 然后我用H-JTAG烧写至NOR ,启动正常。然后想保存ENV参数,(我配置为:#define&&&&&& CFG_ENV_IS_IN_FLASH&&&& 1),然而保存时出现:&& Enter your selection: qMINI(wax)&saveenvSaving Environment to Flash...Un-Protected 1 sectorsErasing Flash...Erasing sector 18 ... ok.Erased 1 sectorsWriting to Flash... General Flash Programming ErrorProtected 1 sectorsMINI(wax)&请教一下这是什么原因呢?
水滴石穿,绳锯木断
级别: 新手上路
金钱: 15 两
威望: 3 点
贡献值: 0 点
综合积分: 6 分
&回 2楼(8779586) 的帖子
第一个问题,串口没有任何信息,这个不太应该,你可以尝试使用supervivi的[v]选项试一下;第二个问题,我不清楚,我没有使用过NOR flash。需要顺便说一下的是,我的mini2440本来也是128M nand flash, 但是后来开发需要,我的已经换成了64M的。我觉得不好意思,这两个问题都无法确切的给你答复,
我分享,我快乐!
级别: 侠客
金钱: 600 两
威望: 79 点
贡献值: 1 点
综合积分: 156 分
这个要顶!非常感谢楼主的分享
嵌入式博大精深
级别: 新手上路
金钱: 35 两
威望: 7 点
贡献值: 0 点
综合积分: 14 分
楼主你好,二楼出现的问题我现在也出现了,不过我不是用mini2440,我是用优龙的yle2440,呵呵。现在还不知道怎么解决呢。
星星之火,可以燎原
级别: 骑士
金钱: 805 两
威望: 161 点
贡献值: 2 点
综合积分: 320 分
好啊,学习了!
星星之火,可以燎原!
级别: 新手上路
金钱: 115 两
威望: 23 点
贡献值: 0 点
综合积分: 46 分
<div class="f14" id="read_6Mflash能用吗?
级别: 新手上路
金钱: 70 两
威望: 14 点
贡献值: 0 点
综合积分: 26 分
目前还是看不懂
级别: 新手上路
金钱: 235 两
威望: 47 点
贡献值: 0 点
综合积分: 92 分
有详解WinCE nboot的资料吗?
1 Pages: 1/3& & &Go
Powered by

我要回帖

更多关于 mini2440烧写uboot 的文章

 

随机推荐