共计 3732 个字符,预计需要花费 10 分钟才能阅读完成。
OMAPL138 制作 SD 卡启动盘及重装 Linux 系统
手里的创龙的 OMAPL138 平台的系统 SSH 坏掉了,我重新移植了 openssh 还是不好使,没有办法了只能重装 OMAPL138 的系统了,按照创龙给的文档《SD 卡启动盘制作》按照步骤进行,当执行一个叫做 mksdboot-tl.sh 文件时候出现以下报错:(倒数第 4 行)
sfdisk 无效选项 — D,然后我进入到了这个脚本文件中查看了这一步骤执行了什么命令,发现:
sfdisk -D -H ....
我查看了 sfdisk 的手册,并没有发现 - D 参数,咨询了创龙的 AE,他们给的说法是,需要换 ubuntu 12.04 系统,而我用的是 ubuntu 16.04。我没有去换这个系统,我觉得也不应该去换,我们应该去寻找问题本质,从根源理论上出发,不能让问题被动地去改变我们,而我们应该去主动解决问题!!带着好奇心,一步一步的学习,经过一天一夜的锤炼,终于把这个问题解决了,成功的把系统写入了新的 SD 卡,当看见一个崭新的系统在我面前的时候,我真的挺激动的。这也正是技术有趣的地方。
废话不多说了,进入正题。
【导语】:OMAPL138 是德州仪器的 ARM+DSP 架构,实际上 ARM 这块依旧按照 TI Sitara 系列 ARM 的套路来的,基本上所有的板子都可以大同小异的按照这个本文提供的方法进行 SD 卡启动盘的制作。在本博客中将要分享 SD 卡分区重新装在嵌入式 Linux 在 OMAPL138 或(TI 其他 ARM 的平台)
本机环境和准备工作
- 本机工作于 Ubuntu 16.04.3 amd64 系统
- u-boot-tools 组件 (使用
sudo apt-get install u-boot-tools
命令安装) - fdisk 命令,dd 命令,mkfs 命令等
- OMAPL138 的 rootfs 根文件系统及 boot 文件(已打好包上传到百度云见本文附件)
SD 卡的格式化
OMAPL138 的 Linux 系统和引导都在 SD 里面,所以 SD 卡的分区十分重要,在这里要区分 SD 的分区和 SDka 分区的类型和名称。OMAPL138 的文档中给出要分为两个区 一个 boot(2G 大小,格式:b 型 FAT32)和 一个 rootfs(不少于 4G,85 型 Linux 文件系统)。
1. SD 卡分区
插上我们的 USB 读卡器,等待系统读取了 SD 卡的信息。输入:
-
查看分区
sudo fdisk -l
得到下面截图的图片,这里有两个注意点,fdisk 命令十分危险,一定要看清楚后执行,博主曾经的时候因为输错一个字母导致整个机械硬盘格式化,花费了将近一天恢复。重点在看清楚
/dev/sdc
这个 sdc,(插入不同的 USB 口 Linux 分配的挂在节点名称就不一样,可能是 sdd,可能是 sde,总之看清楚确认好是你的目标内存卡)然后看倒数两行的信息,现在这个 SD 卡有两个分区,分别是 sdc1 和 sdc2,我们现在要把这两个分区全部清除掉(你的可能有三四个分区,也可能只有一个分区)
-
fdisk 操作
上面的操作已经获得了 /dev/sdc 的设备节点名称,然后我们对 /devsdc 进行分区,需要建立两个分区,一个 boot(FAT32 型,大约 2G 大小)和 rootfs 区(Linux 文件系统型,内存卡剩余大小全给它)
解挂 SD 卡:
sudo umount /dev/sdc*
这里加入通配符 * 就是解挂所有分区。
sudo fdisk /dev/sdc
会有一个这样的和用户交互的界面,可以输入 p,回车,查看当前 /dev/sdc 分区状态。
然后我们删除所有分区,按照图片输入:
到此为止我们删除了所有的分区,然后我们就开始建立分区。
建立分区:
到此为止,第一个分区我们的 boot 分区建立完毕。建立第二个分区 rootfs 分区:
从图中可以看出我们已经建立了一个 linux 类型的 12.9GiB 大小的分区,这个就是 rootfs 分区,不需要修改文件类型。
通过 p 我们查看建立的分区,就是我们刚才建立的分区,重点 3 个位置,启动那个 * 要在 sdc1 位置,两个文件类型一个是 FAT32 一个是 Linux 即可。
还有最后一步,非常重要,输入
w
对结果进行保存。然后,fdisk 会自动退出。输入
sudo fdisk -l
命令查看是否建立成功。如果的确是这样的输出,就成功了。
-
格式化分区
我们进行了分区之后就开始对分区进行格式化操作,并通过命令指定分区卷名字。
- 把读卡器拔了重新插一次。
- 解挂分区:
sudo umount /dev/sdc
- 对 /dev/sdc1 进行格式化:
sudo mkfs.vfat -F 32 -n "boot" /dev/sdc1
- 对 /dev/sdc2 进行格式化:
sudo mke2fs -j -L "rootfs" /dev/sdc2
这一步骤会提示“无论如何都要继续(y,n)”输入 y
提示“Writing superblocks and filesystem accounting information:”直接回车
到此,我们完成了格式化。
建立 boot 引导区
内存卡的工作已经做完了,我们开始进行 boot 引导区的建立,在 本文的文件附录下载压缩包 mksdboot.rar 文件 ,然后解压到你 linux 你任意的位置,你喜欢哪里就哪里,我解压到~/script/mksdboot
目录下了,以下所有命令都以这个路径为例,自己注意修改。
boot.cmd 文件
文件里面写入是这些内容
mmc rescan 0
setenv bootargs ${mem_args} console=ttyS2,115200n8 root=/dev/mmcblk0p2 rw ip=off eth=${ethaddr} rootwait
使用 mkimage 命令建立 boot.scr 文件
mkimage -A arm -O linux -T script -C none -a 0 -e 0 -n 'Execute uImage' -d ~/script/mksdboot/boot.cmd ~/script/mksdboot/boot.scr
然后我们进入到这个目录查看会生成 boot.scr 文件,这个文件就是我们要写入到 boot 区域的文件。
准备 boot 文件
1) 把读卡器拔了,然后再重新插一次
2) 把 boot 目录里面的所有文件都拷贝到内存卡的 boot 分区。sudo cp ~/script/mksdboot/boot/* /media/delvis/boot/
3)解挂 /dev/sdc: sudo umount /dev/sdc*
4) 重点:使用 dd 命令烧写 u -boot.ais 文件:sudo dd if=/home/delvis/script/mksdboot/boot/u-boot.ais of=/dev/sdc seek=10
如图,表示成功。(这里请使用绝对完全的路径,不要使用终端里面例如 ~ 这个符号代表的主目录)
建立 Linux 的文件系统
1 解压文件系统到 rootfs
这个就没有什么了,把内存卡拔了再插一下,在压缩包的 filesystem 里面有 rootfs.tar.zb2 文件,使用解压命令,解压到内存卡的 rootfs 区域即可。
sudo tar -xvf ~/script/mksdboot/filesystem/rootfs.tar.bz2 -C /media/delvis/rootfs
等待解压完成之后,一个启动盘就做好了。
2 建立 matrix-gui-2.0 的连接文件
通过运行这个脚本来进行:注意修改脚本里面的路径,在 5 和 6 行,这个脚本路径是我自己 SD 卡挂在的路径
#!/bin/bash
# check if we need to create symbolic link for matrix
cd /media/delvis/rootfs/etc/init.d
echo -n "Creating matrix-gui-e symbolic link..."
if [-f /media/delvis/rootfs/etc/init.d/matrix-gui-e]; then
if [-h /media/delvis/rootfs/etc/rc3.d/*matrix*]; then
echo "(skipped)"
else
ln -s ../init.d/matrix-gui-e /tmp/sdk/$$/etc/rc3.d/S99matrix-gui-e
ln -s ../init.d/matrix-gui-e /tmp/sdk/$$/etc/rc5.d/S99matrix-gui-e
echo "Create done"
fi
fi
sync
3 内存卡启动
可以把内存卡拿下来,放在板子里启动了。注意调节拨码开关让 OMAPL138 从内存卡启动。
结束语
今天完成了 Linux 内存卡的制作,完成了,看到了启动界面。
附录文件:
文件:mksdboot.rar
链接:https://pan.baidu.com/s/1pLzc0I3 密码:f9v8
参考文献:
[1] kooking 著 SD 卡给 am335x 用作启动介质. TI 技术支持社区.
[2] 杰瑞 26 著. 图解 Linux 命令 –mkfs 命令. CSDN 博客.
[3] 创龙公司著. mksdboot-tl.sh 脚本文件和相关文档. 创龙手册.
版权声明:
1. 本文为 MULTIBEANS 团队研发跟随文章,未经允许不得转载。
2· 文中涉及的内容若有侵权行为,请与本人联系,本人会及时删除。
3· 尊重成果,本文将用的参考文献全部给出,向无私的工程师,爱好者致敬。