Chinaunix首页 | 论坛 | 博客
  • 博客访问: 204655
  • 博文数量: 56
  • 博客积分: 1085
  • 博客等级: 少尉
  • 技术积分: 652
  • 用 户 组: 普通用户
  • 注册时间: 2011-09-29 13:50
文章分类
文章存档

2014年(4)

2012年(25)

2011年(27)

我的朋友

分类: 嵌入式

2014-02-18 17:14:17

/**********************************************************************************/
2013/10/9:
-----------------------------------------------------------------------------------
u-boot-1.1.6 移植成功1:nandflash与norflash都能检查到并支持。开发板能从norflash中启动。
问题:1.开发板不能从nandflash中启动,串口中无法打印信息。(解决1)


uboot移植总结:
1.根据http://blog.sina.com.cn/s/blog_6ca3f0fe0100tz1l.html网址中的步骤移植最初的uboot,
虽然此时的uboot虽然支持了nand flash和nor flash并能检查到。但只能从nor flash上启动,
无法从nand flash上启动。
2.找到韦东山已经移植好的uboot源码u-boot-1.1.6_jz2440进行参考。
3.将u-boot-1.1.6_jz2440中的nand_flash.c文件替换到自己移植的uboot相应的目录中。
4.将u-boot-1.1.6_jz2440中的s3c24x0.h (u-boot-1.1.6_jz2440\include)文件替换到自己移植的uboot相应的目录中。
5.将u-boot-1.1.6_jz2440中的start.S (u-boot-1.1.6_jz2440\cpu\arm920t文件替换到自己移植的uboot相应的目录中。
6.将u-boot-1.1.6_jz2440中的start.S (u-boot-1.1.6_jz2440\cpu\arm920t文件替换到自己移植的uboot相应的目录中。
7.(关键一步)
将u-boot-1.1.6_jz2440中的boot_init.c (u-boot-1.1.6_jz2440\board\100ask24x0)文件替换到自己移植的uboot相应的目录中。
可在此文件程序中看到int bBootFrmNORFlash(void)与int CopyCode2Ram(unsigned long start_addr, unsigned char *buf, int size)
两个函数。这两个函数式关键函数。注:其Makefile中也要相应的添加上boot_init.o。
8.日后自己再次移植uboot时可省去第7步之前的几步,试试是否成功。
问题1解决1方法:步骤3、4、5、6、7。


nor flash下的实验:
在nor flash启动的情况下使用串口下载uboot:
loady 30000000
protect off all
erase 0 7ffff   //uboot 512k
cp.b 30000000 0 80000   //复制到nor flash的0地址处,512k大小
reset   //重启


遗留问题:
1.无法在nor flash中完成下载uboot镜像实验。
2.网卡无法正常使用。
/******************************************************************************/
2013/10/10 17:16:42
-----------------------------------------------------------------------------------
在nor flash启动情况下操作实验:
问题:进行protect off all操作时出现Un-Protect Flash Bank # 1错误信息。(未解决,以后再解决。暂时用nand flash。)
/**********************************************************************************/
2013/10/14 11:37:10
-----------------------------------------------------------------------------------
由于无法从在nor flash中使用protect off all命令
因此在nand flash中进行串口下载实验操作。


通过串口下载uboot到nand flash。利用Ymodem模式发送镜像。
loady 30000000 //利用串口将镜像下载到内存中
nand erase 0 40000 //擦除nand flash的前256k区域
nand write 30000000 0 40000 //将内存30000000中的内容写到nand flash中。
reset //重启开发板


nand flash中进行nfs下载实验:


通过网线nfs服务下载uboot到nand flash。
首先设置开发的地址(保证与主机在同一个网段中)。
操作如下:
setenv ipaddr 10.1.35.100
setenv serverip 10.1.35.74
setenv ethaddr 00:0C:29:D1:47:C4
setenv netmask 255.255.252.0
saveenv


在进行saveenv操作时,出现如下错误。
OK2440#saveenv
Saving Environment to Flash...
Error: start and/or end address not on sector boundary
解决方法:
通过查看saveenv命令可以追溯到env_nand.c文件中。看程序可知修改配置文件fl2440.h
增加如下宏
#define CFG_ENV_IS_IN_NAND  1         //根据env_nand.c文件程序要增加此宏
#define CFG_ENV_SIZE         0x20000  //环境参数的大小   其大小必须是整块的大小,128k的倍数  
#define CFG_ENV_OFFSET      0x40000 //boot参数存放nand flash中的位置
然后重新编译uboot,下载到nand flash中。
在串口可以看到*** Warning - bad CRC or NAND, using default environment信息
然后输入save命令后警告信息消失。这样就可以在nand flash上保存环境变量了


输入nfs命令下载uboot
注:在输入nfs命令之前要确定虚拟机中nfs服务开通,添加nfs用户。
然后在输入# service nfs restart,重新启动nfs服务。
否则会出现如下错误:
OK2440#nfs 30000000 10.1.35.74:/home/hyx/u-boot-1.1.6/u-boot.bin
dm9000 i/o: 0x20000000, id: 0x90000a46 
DM9000: running in 16 bit mode
MAC: 00:0c:29:d1:47:c4
could not establish link
File transfer via NFS from server 10.1.35.74; our IP address is 10.1.35.100
Filename '/home/hyx/u-boot-1.1.6/u-boot.bin'.
Load address: 0x30000000
Loading: *** ERROR: Cannot mount
nfs命令:
nfs 30000000 10.1.35.74:/home/hyx/u-boot-1.1.6/u-boot.bin //(通过)
nand erase 0 40000 //擦除nand flash的前512k区域
nand write 30000000 0 40000 //将内存30000000中的内容写到nand flash中。
reset //重启开发板


tftp传输实验:
tftp 30000000 u-boot.bin 
nand erase 0 40000 //擦除nand flash的前256k区域
nand write 30000000 0 40000 //将内存30000000中的内容写到nand flash中。
reset //重启开发板


无法传输下载uboot镜像,出现如下信息(未解决):
OK2440_hyx#tftp 30000000 u-boot.bin
dm9000 i/o: 0x20000000, id: 0x90000a46 
DM9000: running in 16 bit mode
MAC: 00:0c:29:d1:47:c4
could not establish link
TFTP from server 10.1.35.74; our IP address is 10.1.35.100
Filename 'u-boot.bin'.
Load address: 0x30000000
Loading: T T T T T T T T T T 
Retry count exceeded; starting again
/**********************************************************************************/
2013/10/15 16:00:43
-----------------------------------------------------------------------------------
加下来修改uboot里的分区,利用mtdparts命令来查看暂时uboot中的分区信息,
但无mtdparts命令。所以要添加mtdparts命令:
由内核中的分区表去修改uboot中的分区信息。例如以下内核分区表:
Creating 4 MTD partitions on "NAND 256MiB 3,3V 8-bit":
0x00000000-0x00040000 : "bootloader"
0x00040000-0x00060000 : "params"
0x00060000-0x00260000 : "kernel"
0x00260000-0x10000000 : "root"
在配置文件中增加如下宏
#define CONFIG_JFFS2_CMDLINE 1   
#define CONFIG_JFFS2_NAND    1
#define MTDIDS_DEFAULT "nand0=nandflash0"
#define MTDPARTS_DEFAULT "mtdparts=nandflash0:256k@0(bootloader)," \
                            "128k(params)," \
                            "2m(kernel)," \
                            "-(root)"
然后在main.c中的main_loop函数中的
#ifdef CONFIG_AUTO_COMPLETE
 install_auto_complete();
#endif
下添加如下语句;                            
/*  执行mtd分区,在此处添加mtdparts_init函数执行初始化 */
#ifdef CONFIG_JFFS2_CMDLINE
    extern int mtdparts_init(void);
    if (!getenv("mtdparts"))
    {
        run_command("mtdparts default", 0);
    }
    else
    {
        mtdparts_init();
    }
#endif
还有修改开发板的配置文件
原来的
#define CONFIG_COMMANDS \
   (CONFIG_CMD_DFL  | \
   CFG_CMD_CACHE  | \
   CFG_CMD_NAND  | \
   /*CFG_CMD_EEPROM |*/ \
   /*CFG_CMD_I2C  |*/ \
   /*CFG_CMD_USB  |*/ \
   CFG_CMD_PING  | \
   CFG_CMD_REGINFO  | \
   CFG_CMD_DATE  | \
   CFG_CMD_ELF)
更改后的
#define CONFIG_COMMANDS \
                        ((CONFIG_CMD_DFL | \
                        CFG_CMD_CACHE    | \
                  
                        CFG_CMD_PING     | \
                        CFG_CMD_JFFS2    | \
                        CFG_CMD_NAND     | \
                 
                        /*CFG_CMD_EEPROM |*/ \
                        /*CFG_CMD_I2C    |*/ \
                        /*CFG_CMD_USB    |*/ \
                        CFG_CMD_REGINFO  | \
                        CFG_CMD_DATE     | \
                        CFG_CMD_ELF))
然后在命令行中输入mtdparts后会出现如下信息:
device nand0 , # parts = 4
 #: name                        size            offset          mask_flags
 0: bootloader          0x00040000      0x00000000      0
 1: params              0x00020000      0x00040000      0
 2: kernel              0x00200000      0x00060000      0
 3: root                0x07da0000      0x00260000      0   (128MB)


active partition: nand0,0 - (bootloader) 0x00040000 @ 0x00000000


defaults:
mtdids  : nand0=nandflash0
mtdparts: mtdparts=nandflash0:256k@0(bootloader),128k(params),2m(kernel),-(root)


接下来可以进行linux kernel的移植了。
具体移植步骤参考韦东山的内核移植内容。或参考http://blog.chinaunix.net/uid-26318500-id-3074636.html
/**********************************************************************************/
2013/10/18 13:48:51
-----------------------------------------------------------------------------------
无法制作uImage映像文件,待解决。
/**********************************************************************************/
2013/11/1 16:36:34
-----------------------------------------------------------------------------------
uImage映像已解决,请查阅mkimage制作linux内核映像 即uImage是怎么制作的.txt。
在opzoon公司里不能使用无线网opzoon-guest,只能使用opzoon-user无线网络,然后桥接后即可开发板ping
通主机,又pc机可上网。
内核中的从第16项没有移植,此时可以暂时跑个系统,没有完全进入命令行,只是进入到了
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)这里。
接下来进行文件系统移植来解决。
/**********************************************************************************/
2013/11/4 15:19:00
-----------------------------------------------------------------------------------
制作根文件系统,利用busybox-1.7.0。
先根据韦东山书中的步骤来移植busybox,和参考busybox移植.txt文档。
制作yaffs2文件系统镜像:
先解压yaffs_source_util_larger_small_page_nand.tar.bz2
然后进入Development_util_ok/yaffs2/utils执行make命令
得到mkyaffs2image应用文件。
然后
cd /home/hyx/nfs_root_hyx/
mkyaffs2image fs_mini_hyx fs_mini_hyx.yaffs2
制作出yaffs2文件镜像。
将yaffs2镜像文件烧入到开发板
nfs 30000000 10.1.35.74:/home/hyx/nfs_root_hyx/fs_mini_hyx.yaffs2
从内核的启动信息中得到文件系统存储地址区域(0x000000260000-0x000008000000 : "root")
nand erase 0x260000 0x8000000
nand write.yaffs 0x30000000 0x260000
由于现在的bootloader中无nand write.yaffs命令
需对uboot增加nand write.yaffs命令。操作参考支持yaffs映像烧写.txt文档
重新制作uboot镜像。
烧入新的支持yaffs映像烧写的uboot.bin文件
nfs 30000000 10.1.35.74:/home/hyx/u-boot-1.1.6/u-boot.bin //(通过)
nand erase 0 40000 //擦除nand flash的前512k区域
nand write 30000000 0 40000 //将内存30000000中的内容写到nand flash中。
reset //重启开发板
然后再次烧入yaffs2文件系统镜像。
但在擦除nand 时出现以下错误信息:
NAND 128MiB 3,3V 8-bit: MTD Erase failure: -22
NAND 128MiB 3,3V 8-bit: MTD get bad block failed: -22
ERROR
发现时nand erase命令用法错误:
nand erase off size (0x8000000-0x26000=0x7DA0000)


nfs 30000000 10.1.35.74:/home/hyx/nfs_root_hyx/fs_mini_hyx.yaffs2
nand erase 0x260000 0x7DA0000
nand write.yaffs 0x30000000 0x260000 $(filesize)
再次烧入内核镜像
nfs 30000000 10.1.35.74:/home/hyx/linux-2.6.33/arch/arm/boot/uImage
bootm 30000000


还是无法启动!!!!
看看jz2440的原uboot 内核  根文件是否可以使用??
/**********************************************************************************/

阅读(1707) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~