1.Linux內核從遠程nfs啓動(踩坑記錄)

前言

本次實驗的啓動方式是:通過網絡掛載rootfs,內核從sd卡加載,並沒有通過網絡下載
關於uboot的兩點配置bootargs,bootcmd
bootargs:傳遞給內核使用的參數,對uboot來說只是一個環境變量
bootcmd:uboot啓動命令,主要是加載內核,設備樹,rootfs,然後用bootm啓動內核

1.先將隨便燒寫個官方鏡像到sd卡(也不能太隨便,只要你要編譯的內核要接近鏡像的,否則後面替換內核可能導致uboot和內核版本不匹配,從而無法啓動),由於我只需要使用內核所以只需要燒錄到第一個分區截至,嗯,我這裏用了一張128M的古董及sd卡,物盡其用了。先看一下鏡像分區表
在這裏插入圖片描述
可以看到我這個鏡像內核分區截至到地133119扇區(1扇區=512字節),拷貝到sd卡:

sudo dd if=s5p4418-kitkat-sd8g-20171017.img of=/dev/sdd bs=512 count=133119 conv=fsync

2.再回到uboot的參數配置,看一下bootcmd參數。

bloader=ext4load mmc 0:1
bootcmd=$bloader 0x48000000 $kernel;$bloader 0x49000000 root.img.gz;bootm 0x48000000

可以看到bootcmd使用ext4load mmc 0:1(=bloader) 加載了內核和根文件系統。由於內核都是從sd加載的,所以bootcmd我們不用改,至於bootcmd也加載了rootfs,這個不影響後續的啓動。

3.配置bootargs,bootargs的配置只需要保留console,添加ip地址設置,nfsroot,init進程地址

bootargs=console=ttyAMA0,115200n8 nfsroot=192.168.0.109:/home/minicoco/disk1/Dev/nanopi/rootfs 
ip=192.168.0.99:192.168.0.109:192.168.0.1:255.255.255.0::eth0::off root=/dev/nfs rw init=/sbin/init

配置內核支持NFS啓動

make menuconfig
  • Networking support

    • –>Networking options
    • –>TCP/IP networking
    • –>IP:kernel level autoconfiguration
  • File systems

    • –>Network File System
    • –>NFS client support
    • –>Root file system on NFS

重點檢查ramdisk是否開啓,這個開啓了很有可能掛不上NFS

  • General setup
    • –>Initial RAM filesystem and RAM disk(initramfs/initrd) support//去掉

重新編譯內核

make -j16 				 #得到zImage
make uImage LOADADDR=0x48000000 #從uboot可以看出loadaddr地址爲0x48000000

獲取uImage,插上sd卡替換

搭建NFS服務器

1.安裝nfs服務

sudo apt install nfs-kernel-server

2.配置nfs

sudo nano /etc/exports
------------------------------
在/etc/exports結尾添加,no_root_squash參數很重要,不能少
/home/rootfs 192.168.0.0/24(rw,sync,no_subtree_check,no_root_squash)

3.測試nfs服務器
可以吧鏡像中自帶的root.img.gz拷貝出來解壓,先當做rootfs測試下
最後我測試失敗了,卡在了網絡驅動加載的地方,初步懷疑是nfs沒有掛載成功
在這裏插入圖片描述
經過網上各種搜索分析,最後發現這裏有個非常大的坑,nfs服務器不能用最新的1.1.3的版本,需要降級。我是用的是Lubuntu,什麼版本已經不記得了,看了下服務器倉庫中的版本,只有1.1.3。嘗試下載deb包自己裝,一堆依賴無法解決,最後被迫換到ubuntu16系統。血淋淋的教訓,以後還是用老一點版本的系統比較好。
在這裏插入圖片描述
最後這個樣子就算掛載成功了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章