手裏的創龍的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· 尊重成果,本文將用的參考文獻所有給出,向無私的工程師,愛好者致敬。