本文主要用於記錄安裝過程,以便日後查閱回顧。 之前在自己的樹莓派上運行的一直是通過NOOB安裝的Raspbian,但是本人平時更喜歡用Fedora作為開發和使用環境,而且Raspbian上的軟體包通常更新比較緩慢。因為樹莓派2代B型上市前,樹莓派的晶元都是armv6或者更早的架構,只能運行ARM架構
本文主要用於記錄安裝過程,以便日後查閱回顧。
之前在自己的樹莓派上運行的一直是通過NOOB安裝的Raspbian,但是本人平時更喜歡用Fedora作為開發和使用環境,而且Raspbian上的軟體包通常更新比較緩慢。因為樹莓派2代B型上市前,樹莓派的晶元都是armv6或者更早的架構,只能運行ARM架構的Raspbian或者Fedora 18及更早版本。樹莓派2代B型搭載的晶元架構是armv7,樹莓派3代搭載的晶元架構是armv8,這兩種晶元都能夠運行ARM架構的Fedora 23,而僅運行Raspbian也難以充分發揮硬體性能,因此通過查找資料,最終找到了Fedora官方的文檔說明。首先在16G的存儲卡上驗證成功,今天就在64G的SD卡上再來一遍,順便把每個步驟記錄下來,以備自己和其他人參考。
0. 準備工作
下載Fedora 23 ARM鏡像和raspberry專用固件(Boot和Kernel):
a. Fedora 23 ARM 官方下載地址 [https://arm.fedoraproject.org/]
b. Raspberry Pi專用固件下載地址 [https://github.com/raspberrypi/firmware/archive/master.zip]
下載完後解壓到方便的目錄備用即可。
1. 創建磁碟分區結構
因為官方的文檔中只介紹了fdisk的使用,因此就偷懶,只參考了官方文檔的步驟,至於其他工具是否可行,暫時就不研究了。有興趣的話可以試試。
由於大部分操作都是需要根用戶許可權的,如果覺得經常sudo麻煩,可以直接su切換到根用戶。
首先需要確定磁碟的設備路徑,使用USB讀卡器有可能路徑是/dev/sdb,而使用電腦內置的讀卡器,SD卡的路徑可能是/dev/mmcblk0,自己根據情況確定。
確定設備路徑後運行# fdisk /dev/sdb
(這是我電腦上的路徑)
回車後進入交互模式,p列印當前操作磁碟的分區信息,d刪除,刪除現存的分區。
接著說說我打算創建的分區:根據官方文檔,boot分區128Mb就足夠了,因為2代B型的記憶體是1G,所以swap分區乾脆給1G;這時還剩大約58G可用空間,給系統16G以上的可用空間差不多了,如果打算作為開發工作站,裝很多軟體包,可以適當留多一些,剩下的空間作為用戶分區。
然後輸入n創建新的分區,回車後出現提示,輸入p可以創建主分區,輸入e可以創建擴展分區,我們要創建的是主分區,之後根據提示輸入1表示要創建的是第一個分區,然後輸入兩次回車,跳過First sector選項,在Last sector選項中輸入+128M,表示劃分給分區的大小。屏幕上的提示信息可以參考如下:
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 1
First sector (32-31422463, default 32):
Last sector, +sectors or +size{K,M,G,T,P} (32-31422463, default 31422463): +128M
Created a new partition 1 of type 'Linux' and of size 128 MiB.
當看到Created a new partition 1 of type 'Linux' and of size 128 MiB.信息時就表示分區創建成功了。
根據剛纔的提示我們可以知道,剛纔創建的分區類型是“Linux”的,而樹莓派要求Boot分區必須是FAT32,因此還需要輸入t命令轉換分區類型。輸入L查詢所有類型代碼,可以查到W95 FAT32的代碼是b,因此輸入b,此時會顯示類似下麵的信息:
Selected partition 1
Partition type (type L to list all types): b
Changed type of partition 'Linux' to 'W95 FAT32'.
接著重覆上面的步驟,創建swap分區和系統分區。註意新建分區和修改分區類型時選擇分區的編號需要增長。根據官方文檔,swap分區的分區類型應該是“Linux swap / Solaris”類型,對應的編號是82。而系統分區和用戶分區則不需要修改分區類型。
於是,創建磁碟分區結構的工作就基本完成了,執行p命令查看結果,確認無誤後執行w命令寫入存儲卡。如果系統提示需要重啟或者重新連接讀卡器的,先重啟或者重新連接後再執行下一步。
2. 格式化剛纔新建的SD卡分區
如果分區已經成功,這時在/dev/目錄下應該能看到sdb和新建的4個分區:sdb1,sdb2,sdb3,sdb4。如果是用內置讀卡器,則可能是mmcblk0和對應的4個分區:mmcblk0p1,mmcblk0p2,mmcblk0p3,mmcblk0p4。
通過mkfs.vfat+分區設備路徑,將指定分區格式化為FAT32格式。通過mkswap+分區設備路徑,將指定分區格式化為swap格式。通過mkfs.ext4+分區設備路徑,將指定分區格式化為ext4格式。
3. 掛載Fedora ARM 23系統鏡像和SD卡分區,拷貝鏡像文件
如果鏡像還沒解壓,可以通過# unxz Fedora-Server-armhfp-23-10-sda.raw.xz
命令解壓。
創建臨時掛載點:# mkdir /tmp/img/
創建loop device:# losetup --partscan --find --show Fedora-Server-armhfp-23-10-sda.raw /dev/loop0
掛載loop device的根分區到臨時掛載點:# mount -r /dev/loop0p3 /tmp/img/
這裡說明一下,通常Linux系統鏡像中第一個分區是boot分區,對應/boot/路徑。第二個分區是swap分區,可以忽略,第三個分區才是根分區,對應/。因為我們不打算使用原生的boot和kernal,因此不掛載第一個分區。官方的說明是,隨Fedora一起發佈的kernal暫時沒有支持樹莓派晶元的所有特性,因此最好使用樹莓派的專用內核固件。
接著掛載我們的SD卡系統根分區:
# mkdir /tmp/rpi/
# mount /dev/mmcblk0p3 /tmp/rpi/
掛載SD卡boot分區:
# mkdir /tmp/rpi/boot/
# mount /dev/mmcblk0p1 /tmp/rpi/boot/
掛載SD卡home分區:
# mkdir /tmp/rpi/home/
# mount /dev/mmcblk0p4 /tmp/rpi/home/
然後,將鏡像根分區中的文件拷貝到SD的根分區中:# cp -rpv /tmp/img/* /tmp/rpi/
可以執行sync確認緩存同步。
最後解除鏡像文件的掛載:
# umount /tmp/img
# losetup -d /dev/loop0
4. 拷貝樹莓派專用固件
如果固件還沒解壓,可以通過# unzip raspberry-firmware.zip
命令解壓。
然後通過以下命令拷貝需要用到的文件:
# cp -r firmware-master/boot/* /tmp/rpi/boot/
# cp -r firmware-master/modules/* /tmp/rpi/lib/modules/
然後在SD卡boot分區下創建一個名為cmdline.txt的文件,用來向內核傳遞參數。該文件內容如下:
dwc_otg.lpm_enable=0 console=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p3 rootfstype=ext4 elevator=deadline rootwait
這裡需要註意,因為這個文件是給樹莓派機器用的,SD卡插入樹莓派後,SD卡的設備路徑應該是/dev/mmcblk0,根分區設備路徑就是/dev/mmcblk0p3,所以應該固定寫這個內容,而不再是準備SD卡時在電腦上的設備路徑。
接著在/boot分區下創建一個名為config.txt的文件,這一步是可選的,我第一嘗試沒有建立這個文件,系統可以正常啟動。如果想建立這個文件,文件內容如下:
config_hdmi_boost=4
overscan_left=24
overscan_right=24
overscan_top=16
overscan_bottom=16
disable_overscan=0
core_freq=250
sdram_freq=400
over_voltage=0
5. 設置fstab文件內容
這裡需要註意,修改的是SD卡上的fstab文件,而不是自己電腦上的,如果改錯了,自己的電腦就沒法啟動了,所以需要特別小心。
首先執行# blkid | grep sdb
命令查詢sdb磁碟每個分區的UUID,如果是內置讀卡器,磁碟名可能替換為mmcblk0
然後使用常用的編輯器打開/tmp/rpi/etc/fstab文件,這個文件是在引導的時候用的,修改的時候需要比較嚴謹。首先,swap分區放在最後一行,行數不夠可以拷貝一行。第一行一定是根分區,也就是我們分的第三個系統分區。往下必須是一棵樹型結構,我們把boot分區放在第二行,把用戶分區放在第三行,分別更新UUID、路徑和分區格式信息。確認無誤後保存。
6. 解除SD卡掛載
# umount /tmp/rpi/home/
# umount /tmp/rpi/
最後可以執行sync確認緩存同步。
7. 將SD卡插入樹莓派併進行初始化
上電後正常情況應該會顯示初始化嚮導,可以選擇1~4進行指定的操作,如設定時區、語言、設置root密碼、新建管理員賬號等。完成後重啟即可。
重啟後執行以下命令移除沒用使用到的Fedora官方內核並更新系統:
# dnf update
8. 安裝樹莓派固件更新包
首先執行# dnf install binutils git
安裝依賴組件。
然後執行以下命令安裝rpi-update:
# chmod +x /usr/bin/rpi-update
最後執行# rpi-update
即可進行專用固件升級。
參考資料:
1. Raspberry Pi document on Fedora official wiki [http://fedoraproject.org/wiki/Raspberry_Pi]