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文件
-
把讀卡器拔了,然后再重新插一次
-
把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· 尊重成果,本文將用的參考文獻全部給出,向無私的工程師,愛好者致敬。