一 回忆昨天的昨天的内容
作业:
ROM:只读存储器
PROM:只能写入一次
EPROM:光可擦除
EEPROM: 电可擦除
norfalsh:片内执行
nandflash:片内执行,速度快
EMMC
二. 移植Linux操作系统
2.1 烧录uboot
mkdir porting
cp ubootpak.bin ./
2.2 将Uboot烧录到TF卡中
2.2.1 将SD卡插入读卡器,接到PC上
mount
/dev/sdb1 上挂载的就是U盘设备
需要将SD卡进行分区
需要保留SD卡开头的512byte.
第一个扇区中存放的分区表
分区之后,第513byte的位置放ubootpak.bin
2.2.2 创建SD卡分区
1) 将SD卡插入PC
2)确定一下Linux是否识别U盘
mount
/dev/sdb 是整个SD卡设备
/dev/sdb1 是SD卡中的第一个分区
注意:SD卡分区之后,
需要将Uboot烧录到/dev/sdb文件中
3) mount时,找到类似于:
/dev/sdb1 on /media/liuyang/Wilhelm type
如果没有/dev/sdb1的挂载信息,不需要操作
如果有/dev/sdb1的挂载信息,需要卸载
4)为了给SD卡重新分区,
需要把挂载上的分区都卸载掉
umount /dev/sdb1
umount /media/liuyang/Wilhelm
5) 为了确保卸载成功
再执行一次mount,进行查询
6) 重新建立分区:
a) sudo fdisk /dev/sdb
b) 进入到Command (m for help):
输入p,查看SD的分区情况
c) 输入d,删除分区
d) 输入p,查看SD的分区情况
e) 输入n,新建一个分区,会提示主分区还是扩展分区
f) 输入p,创建主分区
g) 分区号,直接敲回车,选择默认分区号
h) 第一个分区大小,选择1/100 ---> 31162
i) 是否移除签名,选择Y
j) 输入t,格式化成fat32
k) 输入L,查看所有的分区类型
l) 输入b,选择FAT32格式
m) 输入w,保存退出
2.2.3 给SD卡新建的分区进行格式化:
sudo mkfs.vfat -F 32 /dev/sdb1 -n Wilhelm
sync 同步操作
把SD卡从PC中拔掉
2.2.4 烧写uboot
执行dd命令烧写uboot
1) 先将sd卡连接到linux
2) 切换到ubootpak.bin所在目录
3) 执行dd命令
sudo dd if=ubootpak.bin of=/dev/sdb seek=1
sync
if=文件名 输入的文件
of=文件名 输出的文件
seek=block 从输出文件开头跳过block个块后再复制
4) 将SD卡拔出,插入开发板的SD0插槽中,观察实验现象
2.2.5 安装串口工具
windows: Secure CRT 的软件包
D:\easthome_porting\ARM环境\串口工具\SecureCRT\SecureCRT.exe
安装好软件包之后,打开Secure CRT
点击connect,重启开开发板,观察实验现象。
1) 打开设备管理器 ---》 端口 ---》comx
2) 打开Secure CRT, 点击快速连接,选择对应的com口
Serial, 115200, ... 硬件流控不要选,点击连接
重启开开发板,观察实验现象。
串口线:用于打印调试
2.2.6 重启按键,进入uboot的命令行
liuyang#
2.3 烧写Linux内核的镜像
www.kernel.org
2.3.1 获取内核的镜像文件
cp /mnt/hgfs/easthome_porting/fastboot/uImage ./
cp /mnt/hgfs/easthome_porting/fastboot/rootfs_ext4.img ./
将来用fastboot.exe烧录
用USB_OTG连接开发板和上位机
2.3.2 将uImage和rootfs_ext4.img 烧写到EMMC之前
需要先将emmc进行分区
1)进去下位机的uboot命令行
2) fdisk 2 2 0x100000:0x4000000 0x4100000:0x2f200000
参数: 第一个2 明确:TF卡,EMMC硬件特性一模一样,通称MMC
0 代表对SD0卡槽上的设备进行分区
1 代表对SD1卡槽上的设备进行分区
2 代表对emmc进行分区
第二个2 表示要分两个区,分别是uImage和rootfs的分区
指定uImage的分、
起始地址:0x100000
偏移:0x4000000
指定rootfs的分区
起始地址:0x4100000
偏移:0x2f200000
作业:1M 4M 16M 32M 64M 100M对应的16进制
3) 重启开发板,进入uboot的命令行
print
printenv
输入 re 命令重启
4) 利用OTG_USB 烧录uImage 和rootfs
1) 安装fastboot驱动
按照资料包中《fastboot驱动安装.docx》
安装fastboot驱动
2) 在uboot的命令行输入 fastboot
板子上会提示waiting for update...
3) windows中,Win + R
输入 d:
输入 cd easthome_porting
输入 cd fastboot
输入 dir
进入到uImage和rootfs_ext4.img所在的目录,
检查uImage,rootfs_ext4.img,fastboot.exe
有没有这三个文件
烧录uImage:
输入 fastboot flash boot uImage
烧录根文件系统
输入 fastboot flash system rootfs_ext4.img
注意:一旦烧写完毕,立马拔掉USB_OTG!!!!
至此,三大系统软件烧写完毕!
2.3.3 修改两个必要的环境变量:
uboot里面有两个必要的环境变量:
bootargs:
设置bootargs环境变量给linux内核传参
bootcmd: 当uboot启动,3,2,1读秒的时候,如果倒计时
没有被中断,倒计时为0,uboot会起bootcmd中的命令
重启下位机,进入uboot的命令行:
setenv bootcmd mmc read 0x48000000
0x800 0x3000 \;bootm 0x48000000
saveenv
mmc read: uboot的命令,将emmc中的数据读取到内存中
0x48000000: 读取到内存的起始地址
0x800: 从EMMC的偏移多少的扇区的位置,开始拷贝
0x3000: 从EMMC中读取的数据的大小
\; 表示换行
bootm : 从内存0x48000000的位置启动Linux内存
bootargs:
setenv bootargs root=/dev/mmcblk0p2 init=/linuxrc
console=ttySAC0,115200 maxcpus=1 lcd=wy070ml tp=gslx680-linux
saveenv
/dev/mmcblk0p2 emmc中的第二个分区
/linuxrc 一号进程对应的设备文件
ttyS0,115200 控制台
maxcpus 启动uboot时使用的cpu核数
lcd lcd屏幕型号
tp 触摸板的型号