【驱动】第25.3课、毕业班第三课_移植3.4.2内核

主    机:VMWare--Ubuntu-16.04.2-x64-100ask

开发板:JZ2440--256M NandFlash,   2M NorFlash,   64M SDRAM,   LCD-4.3寸;
    bootlorder:  u-boot-2012.04.01,       Kernel:  Linux3.4.2;
编译器:arm-linux-gcc-4.3.2


1、编译的uImage在加载时出现乱码的原因
答:(1)可能(u-boot)初始化的配置不对,例如:I.机器ID,II.晶振,波特率不同步;
I.机器ID
I.老u-boot引导, 用mini2440_defconfig编译出来的.config配置文件,来编译内核得到的 uImage_mini2440_new2 时,将出现乱码!
II.老u-boot引导, 用s3c2410_defconfig编译出来的.config配置文件,来编译内核得到的 uImage_mini2440_new3 时,仍出现乱码!
II.晶振,波特率不同步;
方法:在启动参数里加入波特率:set bootargs noinitrd root=/dev/nfs nfsroot=192.168.1.105:/work/nfs_root/fs_second ip=192.168.1.44:192.168.1.105:192.168.1.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0,115200
I.老u-boot引导, 加载 uImage_mini2440_new2 时,无乱码!
II.老u-boot引导, 加载 uImage_mini2440_new3 时,仍然是乱码(mach-smdks440.c源码中关于晶振的部分未改)!
(2)可能用Linux3.4.2必须使用u-boot-2012.04.01引导,原来的u-boot-1.1.6不能引导该版本的Linux系统;


2、=====新开发板环境搭建=====我的方法--哈哈哈哈~~~
2.1、制作新u-boot-2012:
$ tar xjf u-boot-2012.04.01.tar.bz2
$ cd u-boot-2012.04.01
$ patch -p1 < ../u-boot-2012.04.01_100ask.patch
$ ls
$ make smdk2440_config
Configuring for smdk2440 board...
$ make
如此,即得到新的u-boot-2012.bin,将其下载到PC机以备用!

2.2、制作新的uImage:
$ tar xjf linux-3.4.2.tar.bz2
$ cd linux3.4.2
$ patch -p1 < ../linux-3.4.2_100ask.patch
$ cp config_ok .config
$ make uImage
如此,即生成一个新的uImage,将其复制到服务器/work/nfs_root目录下并更名为uImage_3_4_2以备用!

2.3将fs_mini_mdev_new.yaffs2上传到服务器/work/nfs_root目录下以备用!

2.4重新烧录整个系统:
<1>使用JTAG工具烧u-boot-2012.bin到开发板Nandflash;
<2>下载并烧录内核:
# nfs 30000000 192.168.1.105:/work/nfs_root/uImage_3_4_2 //不得与下面的两行指令一同执行!
# nand erase.part kernel; nand write 30000000 kernel
<3>下载并烧录文件系统:
# nfs 30000000 192.168.1.105:/work/nfs_root/fs_mini_mdev_new.yaffs2 //不得与下面的两行指令一同执行!
# nand erase.part rootfs; nand write.yaffs 30000000 260000 $filesize
<4>设置参数
# set 'nand read 30000000 kernel;bootm 30000000'
# set bootargs console=ttySAC0,115200 root=/dev/mtdblock3
# set machid 16a
# save
# reset
如此,整个系统就烧录完毕并启动开了!


3、问题
3.1重烧整个系统:
使用jtag工具烧u-boot_new.bin或使用uboot来更新自己:
tftp 30000000 u-boot_new.bin; nand erase.part u-boot; nand write 30000000 u-boot
启动uboot,用它来烧写内核、FS:
tftp 30000000 uImage_new; nand erase.part kernel; nand write 30000000 kernel
tftp 30000000 fs_mini_mdev_new.yaffs2; nand erase.part rootfs; nand write.yaffs 30000000 260000 $filesize
问题1:tftp的功能及使用方法?tftp可以自动从PC机的\bin目录下下载文件uImage_new、fs_mini_mdev_new.yaffs2到单板吗?
问题2:内核uImage、fs将被烧写到那个位置?
问题3: 是否等同
(摘录自:课堂笔记7.1 UBOOT可能有问题:换上1.1.6的UBOOT...)
tftp 30000000 u-boot.bin
nand erase.part u-boot
nand write 30000000 u-boot
reset
nfs 30000000 192.168.1.123:/work/nfs_root/fs_mini_mdev_new.yaffs2
nand erase rootfs
nand write.yaffs 30000000 260000 $filesize
set bootargs console=ttySAC0,115200 root=/dev/mtdblock3
nfs 32000000 192.168.1.123:/work/nfs_root/uImage_yaffs
bootm 32000000
答:应该是的,视频文件记录也曾用此方法下载、擦除、烧写分区!

问题4:nfs和tftp的用法?nand erase.part的用法?nand write 和 nand write.yaffs的用法?
答:
<1>Busybox中tftp命令的用法: 命令格式为 ———— tftp [option] ... host [port]
如果要下载或上传文件的话是一定要用这些option的。
-g表示下载文件(get)
-p表示上传文件(put)
-l表示本地文件名(local file)
-r表示远程主机的文件名(remote file)
例1:要从远程主机192.168.1.2上下载embedexpert,则应输入以下命令:
tftp -g -r embedexpert 192.168.1.2
例2:tftp 0x80600000 u-boot-with-spl.bin
把文件u-boot-with-spl.bin通过tftp加载到内存的0x80600000处。
例3:tftp 193.169.3.42
tftp>connect
tftp>get demon.txt
tftp>status
tftp>quit
这就是从共享出通过tftp下载文件。

问题5:请问 nand write 和 nand write.yaffs 的区别是什么?
答:nand write:向Nand Flash写入数据,如果NandFlash相应的区域有坏块,则直接报错。
nand write.e: 向Nand Flash写入数据减肥时会时行ECC校验,如果NandFlash相应的区域有坏块,可以跳过坏块。
nand write.jffs2:向Nand Flash写入jffs2镜像到相应的分区。
nand write.yaffs:同理,实现yaffs文件系统镜像的烧写,这个命令不一定所有版本的u-boot支持,有些版本可能需要自己手动添加。
说明:
(1)直接用nand write或nand write.e来烧写yaffs文件系统镜像可能也可以烧写成功,但容易产生坏块,用nand write.yaffs烧写更好。


下午的任务:
1、把上面的问题4的用法弄清楚
2、把uImage, fs弄出来;
3、用JZ2440开发板做实验

猜你喜欢

转载自www.cnblogs.com/xiaohujian/p/10508696.html