使用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 指定制作映象的源文件