# cd lzo-2.05 # ./configure # make # make install
c.安装 mtd-utils.tar.gz (我资源里)下载地址:http://download.csdn.net/detail/yx_l128125/4243333 # tar zxvf mtd-utils.tar.gz # cd mtd-utils # ./configur # make # make install
步骤2.使用上述安装命令后,mkfs.ubifs被安装到了/usr/local/usr/sbin目录下,可使用命令:export PATH=$PATH:/usr/local/usr/sbin将该路径包含进环境变量,
然后使用命令:mkfs.ubifs -m 2048 -c 2048 -e 126976 -r /nfsroot/rootfs -o rootfs.bin ,将根文件系统所在目录rootfs制作为ubifs镜像文件rootfs.bin,将该文件拷贝到/tftpboot/目录下等待下载烧写。(注意,你在哪执行这个命令,生成的.bin镜像就在执行此命令的当前目录下生成) 【注意点:1.上面制作的ubifs镜像文件使用的命令参数是根据开发板所使用的NAND Flash来确定的,我的NAND Flash容量是256MB,可以适应命令:mkfs.ubifs -h 来查看各个命令选项的意思,我这里只简单的介绍一下:
-r :要制作成镜像的根文件系统的路径
-m:最小的I/O操作的大小(也就是NAND FLASH的一个page的大小) -e : 逻辑擦除块的大小
-p :物理擦除块的大小 -c :最大逻辑擦除块的数量
-o :最终制作成的根文件镜像的文件名
注意点:2.我原来用mkfs.ubifs -m 2048 -c 2048 -e 126976 -r /nfsroot/rootfs -o rootfs.bin 制作成的镜像,启动内核时有错,我曾经的出错现象:
http://www.arm9home.net/read.php?tid-19717.html 但是发现启动内核时打印此出错信息: UBI error: validate_ec_hdr: bad VID header offset 512, expected 2048 UBI error: validate_ec_hdr: bad EC header
UBI error: ubi_io_read_ec_hdr: validation failed for PEB 556 UBI error: ubi_init: cannot attach mtd3
UBI error: ubi_init: UBI error: cannot initialize UBI, error -22 后来找到了相近的解决方案:
http://blog.chinaunix.net/space.php?uid=20632682&do=blog&id=82414 按照这篇帖子最终内核成功的启动了
我现在还不太懂为什么“-e 126976”而不是大多数制作ubifs文件系统写的 “-e 129024 ”如果大家知道请通知我,不胜感激!】
步骤3.通过Jlink或者H-JTAG将u-boot.bin先烧进norflash,之后连接好串口线和网线,从norflash启动开发板。
步骤4.设定好网络相关的环境变量,重点是先设置好ipaddr和serverip(因为下面用到tftp协议下载)之后用sav命令保存环境变量;
之后用命令:tftp 31000000 u-boot.bin 下载uboot.bin到内存地址31000000处。
步骤5:使用命令:nand erase 0 60000,将nand flash的前0x60000字节空间擦除掉。在使用命令:nand write 31000000 0 60000,将内存31000000处的u-boot.bin烧写到nand flash中。 步骤6:使用命令:tftp 31000000 uImage 使用命令: nand erase 80000 300000,将nand flash的kernel分区擦除掉,在使用命令:nand write 31000000 80000 300000 ,将内存31000000处的uImage烧写到nand flash中。
步骤7:使用命令:mtdparts default 使用默认分区对Nand Flash进行分区。使用命令:nand erase root ,擦除root分区。使用命令:ubi part root 2048 ,激活root分区进行ubi格式化。最后使用命令:ubi create rootfs ,创建rootfs分区。
【注意点:原来我用命令: ubi part root 来激活root分区进行ubi格式化,但是启动内核时出现报错信息(看红字部分),所以按这篇博文
http://blog.chinaunix.net/space.php?uid=20632682&do=blog&id=82414改成:ubi part root 2048 之后就没有报错了
UBI error: validate_ec_hdr: bad VID header offset 512, expected 2048 UBI error: validate_ec_hdr: bad EC header
UBI error: ubi_io_read_ec_hdr: validation failed for PEB 556 UBI error: ubi_init: cannot attach mtd3
UBI error: ubi_init: UBI error: cannot initialize UBI, error -22 】
步骤8:使用命令:tftp 31000000 rootfs.bin 下载rootfs到默认内存地址31000000处,使用命令:ubi write 31000000 rootfs $filesize,将内存31000000处大小为$filesize的rootfs.bin通过ubi方式烧写到nand flash的对应分区中。
步骤9: 设置启动变量: bootargs ,(bootargs是uboot传给内核的参数,使用命令:
set bootargs \root=ubi0:rootfs rootfstype=ubifs console=ttySAC0 init=/linuxrc rw \
设置启动命令:bootcmd,(bootcmd 是uboot启动的命令,输入命令:set bootcmd \read 31000000 80000 $filesize; bootm 31000000\最后使用sav命令保存环境变量)
步骤10:关掉电源,让开发板重新从nand flash启动,可以看到内核成功加载了我们只做的ubifs文件系统,如图:
[注意点1:set bootcmd \read 31000000 80000 $filesize; bootm 31000000 \中的\是启动内核的地址,内核启动时自动找到31000000这个地方来启动kernel ;而前面用过的tftp 31000000 xxx 中的\是内存中的地址(存放在内存地址中的数据掉电后就没了)
注意点2:如果 bootm后面不跟地址,默认是到30008000处寻在内核启动的;如果bootcmd环境变量写成:set bootcmd \read 31000000 80000 $filesize; bootm 最终这种现象:如图(因为它到30008000没有找到内核,内核原来由80000的内存地址读到了31000000地址处)
为S3C2440移植内核1.修改晶振频率
2012-04-24 22:23 20人阅读 评论(0) 收藏 举报
S3C2440支持两种频率:12MHZ 和16MHZ.目前市面上出售的开发板大多使用的是12MHZ的晶振,而内核源代码采用的是16MHZ频率,从而产生了错误的PCLK,因此导致内核向串口输出数据时使用了错误的比特率(正确的应该是),这样在超级终端上看到的就是乱码。因此我们只须修改内核源代码中的晶振频率即可。
将内核顶层目录下的 arch /arm/mach-s3c2440/mach-smdk2440.c的第180行:s3c24xx_init_clocks(16934400);
改为:s3c24xx_init_clocks(12000000);
2.修改Nand Flash分区表
这次内核正常启动,不再出现乱码,但未能成功挂载根文件系统。出现错误如下: VFS :Mounted root (jffs2 filesystem ). Freeing init memroy :132k
Warning : unable to open an initial console.
Kernel panic - not syncing : No init found . Try passing init = option to kernel. 仔细查看内核出错前的输出,发现内核在Nand Flash 上创建了 8个分区 : Creating 8 MTD partition on \64MiB 3,3v 8-bit \: 0x00000000 -- 0x00004000 :\Agent\
0x00000000 -- 0x00200000 :\flash partition 1\0x00400000 -- 0x00800000 :\flash partition 2\0x00800000 -- 0x00a00000 :\flash partition 3\0x00a00000 -- 0x00e00000 :\flash partition 4\0x00e00000 -- 0x01800000 :\flash partition 5\