製作ubuntu根檔案系統
參考文件:
http://blog.csdn.net/mountzf/article/details/51707853
http://developer.t-firefly.com/thread-10963-1-1.html
http://rockchip.wikidot.com/porting-os
折騰了幾天,看了不少參考資料,終於把ubuntu根檔案系統製作出來了,基本是參考著上面幾篇資料完成製作的。然後我結合自己過程寫下來,希望不會涉及到侵權問題哈。
本次根檔案系統使用的是ubuntu-base-14.04-core-armhf作為基礎。在此之前我嘗試了ubuntu16的版本,但是mount上去之後,串列埠上只有核心輸出,沒有登入資訊,系統就卡著。查找了一下原因,網友說是由於登入串列埠沒有配置好,需要在/etc/init目錄下新增ttyS0.conf啟動。我嘗試添加了,然而還是啟動不了,結果他們說換個核心版本或者打上相應的補丁就能解決了。如下(我卡住的地方和那位仁兄一樣。)
總之ubuntu16版本我試了好多次都沒有出現登入資訊,只好先放一下,用ubuntu14版本。
以下是製作流程:
1、下載ubuntu14原始碼
上面的連結不知道還行不行,不行的話自行到ubuntu官網上通過頁面下載再傳過去吧。
2、解壓原始碼
mkdir ubuntu14
sudo tar -xpf ubuntu-base-14.04-core-armhf.tar.gz
-C ubuntu14
注意,一定要用sudo命令。
3、下載qemu-user-static
sudo
apt-get install qemu-user-static
4、複製一些必要的檔案
首先進入解壓後的目錄下 cd ubuntu14
- #!/bin/bash
- function mnt() {
- echo "MOUNTING"
-
sudo mount -t proc /proc ${2}proc
- sudo mount -t sysfs /sys ${2}sys
- sudo mount -o bind /dev ${2}dev
- sudo mount -o bind /dev/pts ${2}dev/pts
- sudo chroot ${2}
- }
- function umnt(){
- echo "UNMOUNTING"
- sudo umount ${2}proc
- sudo umount ${2}sys
- sudo umount ${2}dev/pts
- sudo umount ${2}dev
- }
- if ["$1" == "-m" ] && [ -n "$2" ] ;
- then
- mnt $1 $2
- elif ["$1" == "-u" ] && [ -n "$2" ];
- then
- umnt $1 $2
- else
- echo ""
- echo "Either 1'st, 2'nd or bothparameters were missing"
- echo ""
- echo "1'st parameter can be one ofthese: -m(mount) OR -u(umount)"
- echo "2'nd parameter is the full pathof rootfs directory(with trailing '/')"
- echo ""
- echo "For example: ch-mount -m/media/sdcard/"
- echo ""
- echo 1st parameter : ${1}
- echo 2nd parameter : ${2}
- fi
將下載好的ch-mount.sh拷貝到ubuntu14所在的目錄,注意,不是ubuntu14下。 然後增加其可執行許可權。sudo chmod +x ch-mount.sh 接著執行./ch-mount.sh -m ubuntu14/ (其實它的用法在內容寫的很清楚了。) 執行成功後就能看到此事的使用者名稱發生了變化,切換到root,也就是我們進入到自己下載的ubuntu14這個檔案系統下了。 這時候我們就可以裝一些工具,例如 apt-get install vim sudo bash-conpletiong
耐心等它裝完吧 6、新增使用者和root 由於新手上路,我還以為useradd和adduser是沒有區別的,然後隨便用的一個,導致我第一次登陸的時候,無法登陸普通使用者,只能用root賬戶登陸。以下是二者的區別。useradd在建立使用者時不會在/home下自動創建於使用者名稱同名的使用者目錄,也不會自動選擇shell版本,也沒有設定密碼,正因為這樣,一開始無法登陸,需要用passwd命令修改密碼。而adduser在建立目錄時,能完成前者的幾個功能,使用者體驗更加友好。 那麼我們就使用adduser來建立root和ubuntu這兩個賬戶。 7、退出 exit 8、退出mount ./ch-mount -u ubuntu14/ 這樣就基本完成了,至於怎麼配置網路以及桌面系統之類的,後續完成。現在先用nfs掛載上去看看能不能成功mount上。實驗效果如下。
開發板nfs掛接上去後,操作和我們虛擬機器用的ubuntu一樣,ubuntu根檔案製作成功。 後續:製作根檔案的映象 1、dd if=/dev/zero of=ubuntu.img bs=1M count=3000 大概可以這麼理解,先給ubuntu.img這個映象bs*count也就是3000M的空間,如果給小了,後面放不進東西。不要怕給大,後面可以修復減小。 2、格式化映象檔案,並加入linuxroot卷標:
sudo mkfs.ext4 -F -L linuxroot ubuntu.img
3、掛載映象並往裡面拷入修改後的檔案系統: mkdir ubuntu-mount sudo mount ubuntu.img ubuntu-mount sudo cp -rfp ubuntu14/* ubuntu-mount 4、解除安裝映象: sudo umount ubuntu-mount 5、檢查並修復ubuntu.img e2fsck -p -f ubuntu.img
6、減小映象到實際大小 resize2fs -M ubuntu.img
大功告成,看看此時的ubuntu.img是不是小了,可以燒錄了。 (詳細操作說明請參考開頭的三篇文件)
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>分割線>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
2017.9.19更新——將ubuntu rootfs拷貝到SD卡遇到的問題s.
拷貝步驟:
1、用讀卡器把sd卡插入電腦,並且在虛擬機器下的/media目錄下找到掛載上的sd卡,確認已經掛載上了。
2、執行命令fdisk -l 檢視原先sd卡的分割槽情況。在我的這張sd卡上一共有3個分割槽。分別是sdb1、sdb2和sdb5.
3、按照我大哥的說法,根檔案系統放在第5分割槽上 也就是sdb5 ,進去一看,果不其然,存放的確實是原先的根檔案系統。
4、刪除或新建一個分割槽。比如要對sdb5進行操作,執行指令:fdisk /dev/sdb5 然後進入命令列 ,輸入d代表刪除這個分割槽,或者輸入n代表新建一個分割槽。
5、格式化新建的分割槽。為了省時間,我沒有做第4步,而是直接把原來的sdb5格式化了。執行命令 mkfs -t ext4 /dev/sdb5 此處為ext4的格式,按需格式相應的格式。
6、檔案系統拷貝到第5分割槽。我們需要先把sdb5 mount到某個資料夾下,如果發現提示說sdb5正在掛載的話,請先umount /dev/sdb5 一下。然後 mount /dev/sdb5 /mnt
7、第6步之後第5分割槽就掛載到/mnt目錄下了,接著 sudo cp -rp ubuntu/* /mnt (注意,加上-p引數是為了在拷貝的時候保持rootfs檔案的屬性不會改變,不然可能啟動不了)
8、修改檔案 /etc/fstab 原先檔案為:
因為我們rootfs 放在第5個分割槽 所以把/dev/mmcblk0p2改為/dev/mmcblk0p5即可。
9、sd卡插到開發板啟動。果不其然,啟動不了,真是尷尬。
10、無奈~~~向大哥尋求幫助。他說在uboot介面的命令列 bootm去掉根檔案系統地址選項 也就是改為 bootm 80200000 - 81280000 然後save 再次啟動。成功啦~~
二、網路配置問題
經過上面的折騰之後,開發板已經能從sd卡啟動了,不用去nfs掛載上去了。然而接下來的問題是,沒網啊。。。下面開始說明配置。
1、修改/etc/network/interface 這個資料夾。配置成這樣:
根據自己的實際情況配置。。也可以配置成動態ip,不過開發板嘛,最好是配置成靜態的。
2、在/etc/resov.conf 下 配置成:nameserver 192.168.x.1 (根據你自己情況替換掉x)
3、重啟網路 : sudo /etc/init.d/networking restart
4、然後pingy一下,發現說network is unreachble..(無語)
5、我想會不會是eth0沒起來啊,於是乎,執行 sudo ifconfig eth0 up ,結果提示:eth0: ERROR while getting interface flags: No such device(我擦。相當無語)
6、都沒有eth0 還起個鬼啊。於是乎,執行 ifconfig -a 一看顯示的結果,還真沒eth0,取而代之的是can0,怪不得。
7,不過不用怕,招兒有的是。執行:sudo rm /etc/udev/rules.d/70-persistent-net.rules 把原先的檔案刪了。
8、重啟開發板 sudo reboot 然後ifconfig 發現eth0又回來啦 哈哈哈 。。ping閘道器和ping百度都沒問題。就這麼愉快配置好了網路。