手里的创龙的OMAPL138平台的系统SSH坏掉了,我从新移植了openssh仍是很差使,没有办法了只能重装OMAPL138的系统了,按照创龙给的文档《SD卡启动盘制做》按照步骤进行,当执行一个叫作mksdboot-tl.sh文件时候出现如下报错:(倒数第4行)linux
sfdisk 无效选项 -- D,而后我进入到了这个脚本文件中查看了这一步骤执行了什么命令,发现:ubuntu
sfdisk -D -H ....
我查看了sfdisk的手册,并无发现-D参数,咨询了创龙的AE,他们给的说法是,须要换ubuntu 12.04系统,而我用的是ubuntu 16.04。我没有去换这个系统,我以为也不该该去换,咱们应该去寻找问题本质,从根源理论上出发,不能让问题被动地去改变咱们,而咱们应该去主动解决问题!!带着好奇心,一步一步的学习,通过一天一晚上的锤炼,终于把这个问题解决了,成功的把系统写入了新的SD卡,当看见一个崭新的系统在我面前的时候,我真的挺激动的。这也正是技术有趣的地方。bash
废话很少说了,进入正题。架构
【导语】:OMAPL138是德州仪器的ARM+DSP架构,实际上ARM这块依旧按照TI Sitara系列ARM的套路来的,基本上全部的板子均可以大同小异的按照这个本文提供的方法进行SD卡启动盘的制做。在本博客中将要分享SD卡分区从新装在嵌入式Linux在OMAPL138或(TI其余ARM的平台)ssh
sudo apt-get install u-boot-tools
命令安装)OMAPL138的Linux系统和引导都在SD里面,因此SD卡的分区十分重要,在这里要区分SD的分区和SDka分区的类型和名称。OMAPL138的文档中给出要分为两个区一个boot(2G大小,格式:b型 FAT32)和一个rootfs(很多于4G,85型 Linux文件系统)。学习
插上咱们的USB读卡器,等待系统读取了SD卡的信息。输入:ui
sudo fdisk -l
.net
获得下面截图的图片,这里有两个注意点,fdisk命令十分危险,必定要看清楚后执行,博主曾经的时候由于输错一个字母致使整个机械硬盘格式化,花费了将近一天恢复。重点在看清楚/dev/sdc
这个sdc,(插入不一样的USB口Linux分配的挂在节点名称就不同,多是sdd,多是sde,总之看清楚确认好是你的目标内存卡)3d
而后看倒数两行的信息,如今这个SD卡有两个分区,分别是sdc1和sdc2,咱们如今要把这两个分区所有清除掉(你的可能有三四个分区,也可能只有一个分区)code
上面的操做已经得到了/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引导区的创建,在本文的文件附录下载压缩包mksdboot.rar文件,而后解压到你linux你任意的位置,你喜欢哪里就哪里,我解压到~/script/mksdboot
目录下了,如下全部命令都以这个路径为例,本身注意修改。
文件里面写入是这些内容
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区域的文件。
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
如图,表示成功。(这里请使用绝对彻底的路径,不要使用终端里面例如 ~ 这个符号表明的主目录)
这个就没有什么了,把内存卡拔了再插一下,在压缩包的filesystem里面有rootfs.tar.zb2文件,使用解压命令,解压到内存卡的rootfs区域便可。
sudo tar -xvf ~/script/mksdboot/filesystem/rootfs.tar.bz2 -C /media/delvis/rootfs
等待解压完成以后,一个启动盘就作好了。
经过运行这个脚原本进行:注意修改脚本里面的路径,在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
能够把内存卡拿下来,放在板子里启动了。注意调节拨码开关让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· 尊重成果,本文将用的参考文献所有给出,向无私的工程师,爱好者致敬。