当前位置: 代码迷 >> 综合 >> uboot mini2440 笔记 nfs 命令
  详细解决方案

uboot mini2440 笔记 nfs 命令

热度:71   发布时间:2023-12-08 20:17:07.0

使用tek的uboot源码tekkamanninja-u-boot-2010[1].03-tekkaman-052d395.tar.gz

1:编译,修改

修改uboot-tek\tek\board\tekkamanninja\mini2440\nand_read.c中的nand_read_ll函数 ,添加4g08支持他的id为:ecdc

改顶级makefile的cross_compile为arm-linux-

2:设置环境变量

在linux-2.6.32.2/drivers/mtd/nand/nand_ids.c 文件中,定义了所支持的各种Nand Flash类型

打开/arch/arm/plat-24xx/common-smdk.c,可以看到这样一个结构体: 
static struct mtd_partition smdk_default_nand_part[] = { 

上面那个结构体不知道和下面这个结构体有什么关系,实际分区是下面这个

打开/arch/arm/mach-s3c2440/mach-mini2440.c

在 mach-mini2440.c可以看到这样一个结构体: 
以下蓝色部分为说明文字 
tatic struct mtd_partition mini2440_default_nand_part[] = { 
       [0] = { 
               .name   = "supervivi", ;这里是bootloader所在的分区,可以放置u-boot, supervivi等内容,对应
dev/mtdblock0 
               .size   = 0x00040000, 
               .offset = 0, 
       }, 
       [1] = { 
               .name   = "param", ;这里是supervivi的参数区,其实也属于bootloader的一部分,如果u-boot比较
大,可以把此区域覆盖掉,不会影响系统启动,对应/dev/mtdblock1 
               .offset = 0x00040000, 
               .size   = 0x0

       [2] = { 
               .name   = "Kernel", ;内核所在的分区,大小为5M,足够放下大部分自己定制的巨型内核了,
使用了更大的Linux Logo图片等,对应/dev/mtdblock2 
               .offset = 0x00060000, 
               .size   = 0x00500000, 
       }, 
       [3] = { 
               .name   = "root", ;文件系统分区,友善之臂主要用来存放yaffs2文件系统内容,对应/dev/m
               .offset = 0x00560000, 
               .size   = 1024 * 1024 * 1024, // 
       }, 
       [4] = { 
               .name   = "nand", ;此区域代表了整片的nand flash,主要是预留使用,比如以后可以通过应
问读取/dev/mtdblock4就能实现备份整片nand flash了。 
               .offset = 0x00000000, 
               .size   = 1024 * 1024 * 1024, // 
       } 

这里是开发板的nand flash设置表,因为板子上只有一片,因此也就只有一个表 
tatic struct s3c2410_nand_set mini2440_nand_sets[] = { 
       [0] = { 
               .name           = "NAND", 
               .nr_chips       = 1, 
               .nr_partitions  = ARRAY_SIZE(mini2440_default_nand_part), 
               .partitions     = mini2440_default_nand_part, 
       }, 

得知:

 U-boot        :0x0~0x60000
u-boot参数区  : 0x60000~0x80000
内核和文件系统 :0x80000之后


usbslave 1 0x30008000

nand write 0x30008000 0x80000 0x300000

pri
setenv bootcmd "nand read 30008000 0x80000 0x300000;bootm 0x30008000"
setenv bootargs "noinitrd root=/dev/nfs rw nfsroot=192.168.0.46:/home/hgj/task/rootfs ip=192.168.0.2:192.168.0.46::255.255.255.0 console=ttySAC0,115200 init=/linuxrc mem=64M"

save
pri为打印环境变量信息  

save 保存环境变量到nandflash

nand 命令参数分别为 内存地址, nanflash地址 文件大小 。 bootm 命令为启动这个内存地址中的内核文件

加“号 是为了防止bootm命令出错,简单命令不加也可以。

192.168.0.46是nfs服务器ip地址

3:pc端nfs设置

解压文件系统到 /home/hgj/task/rootfs 目录。然后安装nfs 。设置nfs参数:vi /etc/exports 内容:/home/hgj *(rw,sync,no_root_squash) 

启动nfs命令:service nfs restart    &    service portmap restart

4:

如果出现无法生成uImage 情况,即mkimage没有找到这条命令,则将 uboot/tool/mkimage  拷贝到 /usr/bin 中

手动使用mkimage工具的使用:

 以下是制作内核映像的命令示例: 
mkimage -n 'tekkaman' -A arm -O linux -T kernel -C none -a 0x30008000 -e 
0x30008040 -d zImage zImage.img 
参数说明: 
-A 指定 CPU的体系结构,可用值有:alpha、arm 、x86、ia64、mips、mips64、
c 、s390、sh、sparc 、sparc64、m68k等 
-O 指定操作系统类型,可用值有:openbsd、netbsd、freebsd、4_4bsd、linux、
r4、esix、solaris、irix、sco、dell、ncr、lynxos、vxworks、psos、qnx、u-boot、
ems、artos 
-T 指定映象类型,可用值有:standalone、kernel、ramdisk、multi、firmware、script
esystem 
-C 指定映象压缩方式,可用值有: 
none 不压缩(一般使用这个,因为 zImage是已经被 bzip2压缩过的自解压内核)

gzip 用 gzip的压缩方式 
bzip2 用 bzip2的压缩方式 
-a 指定映象在内存中的加载地址,映象下载到内存中时,要按照用 mkimage制作映象
时,这个参数所指定的地址值来下载 
-e 指定映象运行的入口点地址,这个地址就是-a参数指定的值加上0x40(因为前面有个
mkimage添加的 0x40个字节的头) 
-n 指定映象名 
-d 指定制作映象的源文件