OMAPL138製作SD卡啟動介質及重灌Linux系統
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。我沒有去換這個系統,我覺得也不應該去換,我們應該去尋找問題本質,從根源理論上出發,不能讓問題被動地去改變我們,而我們應該去主動解決問題!!
廢話不多說了,進入正題。
【導語】: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
參考文獻:
[3] 創龍公司著. mksdboot-tl.sh指令碼檔案和相關文件. 創龍手冊.
2· 文中涉及的內容若有侵權行為,請與本人聯絡,本人會及時刪除。
3· 尊重成果,本文將用的參考文獻全部給出,向無私的工程師,愛好者致敬。