在开发板上启动Linux内核,一般有两种方法,一种是从EMMC启动,还有一种就是从SD卡启动,不断哪种启动方法,当开发板上电之后,首先运行的是uboot。
制作SD卡启动,首先要将uboot烧写到SD卡,我们既可以在Linux环境下完成烧写,也可以在Windows环境下完成烧写。
在Linux环境下将uboot烧写到SD卡
一、将SD卡接入到虚拟机上的Linux系统
通过读卡器将SD插入到主机上,虚拟机上一般会弹出下面的窗口,选择连接到虚拟机,点击确定。
在虚拟机选卡中选择:可移动设备->USB Storage->连接 (断开与主机的连接)
在终端输入下面命令(按Tab键补齐),得到的结果中有sdb,则说明连接成功:
$ ls /dev/sd
也可以通过linux的图形界面,在Disks中查看:
二、将准备好的文件拷贝到Linux环境下,并解压
存放文件的目录因人而异,按自己选择的来就可以。
将u-boot-fs4412.bin文件也拷贝到sdfuse_q/目录下:
三、给sh脚本文件加上可执行权限
此时,sdfuse目录下的mkuboot.sh和sd_fusing_exynos4x12.sh文件没有执行权限,需要通过chmod命令为其加上执行权限:
sudo chmod +x *.sh
四、执行mkuboot.sh文件,烧写
最后,用sudo权限执行mkuboot.sh烧写,显示如下信息,则说明烧写成功:
至此,已成功将uboot烧写到了SD卡上面。
考虑到有些虚拟机无法识别SD卡,所以我们有必要学习下如何在Windows环境下将uboot烧写到SD卡。
在Windows环境下将uboot烧写到SD卡
如果之前SD卡是连接到虚拟机,在进行Windows环境下的SD卡烧写之前,要将SD卡与虚拟机断开,让其连接到主机
一、将准备好的u-boot-fs4412.bin文件拷贝到家目录下(当然也可以是其他目录)
二、制作一个512字节的空镜像文件
做这一步的原因是,在windows环境下,我们要使用Win32DiskImager工具来烧写,而这个工具是从0扇区开始烧写,为了在uboot前面留下1个空扇区,我们先要烧写512个字节到SD卡。
输入下面命令,生成一个512字节的空镜像:
sudo dd if=/dev/zero of=zero.bin count=1
显示如下信息,则说明zero.bin文件制作成功:
三、将uboot追加到zero.bin之后,生成win-u-boot-fs4412.bin
用cat命令将u-boot-fs4412.bin追加到zero.bin之后,生成win-u-boot-fs4412.bin。
$ cat zero.bin u-boot-fs4412.bin > win-u-boot-fs4412.bin
四、制作1M空镜像擦除SD卡中原有数据
这一步并非一定要做,但为了保险起见,可以做一下,通过dd命令制作一个1M的空镜像clear.bin,用来擦除SD卡中原有数据
五、将制作好的win-u-boot-fs4412.bin和clear.bin拷贝到Windows环境下
通过cp命令将win-u-boot-fs4412.bin和clear.bin拷贝共享目录share下,也就到了Windows环境下。
六、将SD卡通过读卡器插入主机,查看状态(如Windows下无法识别,可能是因为连接到了虚拟机,断开即可)
七、使用Win32DiskImager工具烧写
先烧写clear.bin文件到SD,擦除原有的数据:
确认选择的文件是clear.bin和烧写到的SD卡盘符,点击“Write”
在弹出的对话框中点击“Yes”
弹出烧写成功的对话框,表明已经烧写完成
用同样的方法,将win-u-boot-fs4412.bin烧写到SD卡
至此,成功将win-u-boot-fs4412.bin烧写到了SD。
将开发板连接到主机,SD卡插入开发板,将开发板的启动方式调至SD卡,查看启动状态