[Firefly-RK3399] TFTP/NFS網絡啟動內核與Buildroot文件系統

?網絡啟動,是用 TFTP 在服務器下載內核、dtb 文件到目標機的內存中,同時可以用 NFS 掛載網絡根文件系統到目標機上,實現目標機的無盤啟動。

準備工作:

  • Firefly-RK3399 板卡;
  • 路由器、網線;
  • 安裝有 NFS 和 TFTP 的服務器;
  • 一份制作好的根文件系統。

注:示例中使用的是 Ubuntu 系統的 PC 機作為服務器,通過路由器和網線實現與設備的連接。


1 服務器部署

1、在服務器上部署 TFTP 服務:

參考我博客這篇文章:Linux工具篇 | Ubuntu搭建TFTP服務器

假設 TFTP 目錄是 /tftpboot

2、在服務器上部署 NFS 服務:

參考我博客這篇文章:Linux工具篇 | Ubuntu搭建NFS服務器

然后將制作好的根文件系統復制到網絡文件系統目錄中,假設網絡文件系統目錄是 /nfs/rootfs


2 內核的配置

  • 內核網址:FireflyTeam/kernel: BSP kernel source (github.com)
  • 當前內核 git-commit:3710f06d1cc4e0a35d686d0806c42f0409084cdd

如果要做到掛載網絡根文件系統,需要在內核中做相關配置,并在 dts 中修改相關掛載根文件系統的配置。

首先進行內核配置,在內核目錄中執行 make menuconfig,選擇相關配置:

[*] Networking support  --->Networking options  --->[*]   IP: kernel level autoconfiguration[*]     IP: DHCP support[*]     IP: BOOTP support[*]     IP: RARP supportFile systems  --->[*] Network File Systems  --->[*]   Root file system on NFS

注意:配置完成后要覆蓋原來的config文件!否則編譯的時候還是使用原來的config文件。

修改 rk3399-linux.dtsi 配置,在 dts 文件中修改 chosen 節點下的 bootargs 參數,選擇使用 NFS 掛載遠程根文件系統,內容如下。

源內容:

chosen {bootargs = "earlycon=uart8250,mmio32,0xff1a0000 swiotlb=1 console=ttyFIQ0 ro root=PARTLABEL=rootfs rootfstype=ext4 rootwait overlayroot=device:dev=PARTLABEL=userdata,fstype=ext4,mkfs=1 coherent_pool=1m systemd.gpt_auto=0 cgroup_enable=memory swapaccount=1";};

修改后:

chosen {bootargs = "earlycon=uart8250,mmio32,0xff1a0000 swiotlb=1 console=ttyFIQ0 rw root=/dev/nfs rootfstype=ext4 rootwait overlayroot=device:dev=PARTLABEL=userdata,fstype=ext4,mkfs=1 coherent_pool=1m systemd.gpt_auto=0 cgroup_enable=memory swapaccount=1";};

編譯內核:

make ARCH=arm64 rk3399-firefly.img -j12

編譯完成后,將編譯好的內核文件 boot.imgrk3399-firefly.dtb 文件復制到 /tftpboot 目錄中:

cp boot.img /tftpboot
cp arch/arm64/boot/dts/rockchip/rk3399-firefly.dtb /tftpboot

詳細說明可以參考內核目錄中的 kernel/Documentation/filesystems/nfs/nfsroot.txt


3 U-Boot設置

請先確保目標機網線已插入,接入到服務器的局域網內。

目標機啟動進入 U-Boot 命令行模式,設置以下參數:

#設置目標機 IP 地址
=> setenv ipaddr 192.168.31.101     
#設置 serverip 為服務器 IP 地址
=> setenv serverip 192.168.31.106   #設置從 TFTP 下載內核和 dtb 文件到相應地址,用戶請根據自己實際的目標機修改相應地址
=> setenv bootcmd tftpboot 0x0027f800 boot.img \; tftpboot 0x08300000 rk3399-firefly.dtb \; bootm 0x0027f800 - 0x08300000#設置掛載網絡根文件系統,IP 參數依次為:目標機 IP:服務器 IP:網關:網絡掩碼:設備名:off,可以更簡單的設置 ip=dhcp,通過 DHXP 自動分配 IP
=> setenv bootargs root=/dev/nfs rw nfsroot=192.168.31.106:/nfs/rootfs,v3 ip=192.168.31.101:192.168.31.106:192.168.31.1:255.255.255.0::eth0:off#啟動目標機
=> boot
ethernet@fe300000 Waiting for PHY auto negotiation to complete. done
Speed: 100, full duplex
Using ethernet@fe300000 device
TFTP from server 192.168.31.106; our IP address is 192.168.31.101
Filename 'boot.img'.
Load address: 0x27f800
Loading: #######################################################################################################################################################################################################################################################################################################################################################################################475.6 KiB/s
done
Bytes transferred = 20072448 (1324800 hex)
Speed: 100, full duplex
Using ethernet@fe300000 device
TFTP from server 192.168.31.106; our IP address is 192.168.31.101
Filename 'rk3399-firefly.dtb'.
Load address: 0x8300000
Loading: #######645.5 KiB/s
done
Bytes transferred = 97212 (17bbc hex)
## Booting Android Image at 0x0027f800 ...
Kernel load addr 0x00280000 size 19377 KiB
## Flattened Device Tree blob at 08300000Booting using the fdt blob at 0x8300000XIP Kernel Image ... OKLoading Device Tree to 0000000073edc000, end 0000000073ef6bbb ... OK
Adding bank: 0x00200000 - 0x08400000 (size: 0x08200000)
Adding bank: 0x0a200000 - 0x80000000 (size: 0x75e00000)
Total: 912260.463 msStarting kernel ......

在開機內核日志中可見:

[   12.146297] VFS: Mounted root (nfs filesystem) on device 0:16.

說明已經掛載上了網絡根文件系統。

注意事項

  • 確保 TFTP 服務器、NFS 服務器可用;
  • 確保目標機先插入網線后在開機,且和服務器在同一局域網內,如果是直連目標機和服務器,請使用交叉網線;
  • 內核配置中,Root file system on NFS 依賴于 IP: kernel level autoconfiguration 選項,請先選擇 IP: kernel level autoconfiguration,之后才可以找到 Root file system on NFS 選項;
  • 在 U-Boot 命令行中,請確認 boot.img 燒錄地址和 dtb 文件燒錄地址。(提示:boot.img 的文件結構中,開頭有2k的頭文件,然后才是 kernel。所以在 TFTP 下載內核到目標機時,要下載到對應 kernel 地址減去0x0800的地址上);
  • 在設置掛載遠程根文件系統時,nfsroot=192.168.31.106:/nfs/rootfs,v3 中的 v3 代表 NFS 版本信息,請添加上以避免出現掛載不成功的問題。

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/209265.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/209265.shtml
英文地址,請注明出處:http://en.pswp.cn/news/209265.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

微前端 前置知識2--- monorepo架構

目錄 前言 pnpm vs npm pnpm設計思想 硬連接 軟鏈接 (符號鏈接) 原理 pnpm 指令 monorepo架構 介紹 配置monorepo pnpm --filter 前言 我們采用的是微前端一個主應用,和多個子應用,我們肯定不會一個一個去install安裝…

uniapp微信小程序富文本、小程序富文本、rich-text解決video問題

我直接使用的 mp-html mp-html 相當好用,功能比較完善,也可以二次開發 具體的直接看官方文檔吧

Linux安全學習路標

1. 操作系統基礎知識 首先,你需要建立堅實的操作系統基礎知識,包括Linux文件系統和目錄結構、Linux進程管理、權限管理等基本概念。 2. 網絡和通信安全 學習關于網絡和通信安全的基礎知識,包括TCP/IP協議棧、網絡攻擊類型、防火墻配置、網…

vscode + Linux 如何在編輯器調試webserver這類完整C++項目

1. 問題背景 網上搜的一堆文章都是教如何調試單個文件,或者一個文件夾下含了所有cc和頭文件,但很多項目頭文件和實現在上級目錄的子文件中,vscode直接調試main函數所在文件時,直接報錯某些頭文件找不到(xxx.h not found 或者 und…

12.5單端口RAM,JS計數器,流水線乘法器,不重疊序列檢測器(狀態機+移位寄存器),信號發生器,交通燈

單端口RAM timescale 1ns/1nsmodule RAM_1port(input clk,input rst,input enb,input [6:0]addr,input [3:0]w_data,output wire [3:0]r_data );reg [6:0]mem[127:0];integer i;always (posedge clk or negedge rst) beginif(!rst) beginfor (i0; i<127 ; ii1) beginmem[i]…

Linux--權限問題(1)

前文 Linux--初識和基本的指令&#xff08;1&#xff09;-CSDN博客 Linux--初識和基本的指令&#xff08;2&#xff09;-CSDN博客 Linux--初識和基本的指令&#xff08;3&#xff09;-CSDN博客 目錄 前文 前言 1.剩余指令部分 1.1 打包和壓縮的其它指令 2.權限部分 2.1權…

探秘MSSQL存儲過程:參數傳遞、錯誤處理、性能優化

參數傳遞、錯誤處理和性能優化是存儲過程中非常重要的方面。在本節中&#xff0c;我們將深入探討這些主題&#xff0c;并提供相應的示例代碼。 1、參數傳遞 存儲過程可以接受輸入參數和輸出參數&#xff0c;以便與外部代碼進行交互。以下是一些常見的參數傳遞方式&#xff1a;…

Qt基礎-程序打包發布方法

本文講解Qt程序打包發布方法。 一、使用Qt自帶的windeployqt 生成可運行的包 準備將Qt生成的exe拷入到單獨的文件夾,并進行命名,本文命名為packDemorun,并將文件放到D盤(自己隨意放置) 1、找到Qt自帶的命令終端 2、啟動命令終端 3、輸入:cd /d D:\packDemorun,進入文…

IDEA刪除最近打開的文件記錄

IDEA刪除最近打開的文件記錄 遇見問題&#xff1a;如何刪除IDEA中最近打開的文件記錄 解決方法 先關閉IDEA 找到 recentProjects.xml 文件 windows 位置&#xff1a;&#xff08;AppData是隱藏文件夾&#xff09; 1.C:\Users\電腦用戶名\AppData\Roaming\JetBrains\IntelliJIde…

Git 請輸入一個提交信息以解釋此合并的必要性

操作方法&#xff1a;按住Ctrl加下面的某個字母

linux-man命令的使用及練習

目錄 1. 命令概述 2. 使用 3. 練習 ?man services時報錯&#xff1a;No manual entry for services的解決辦法 4. man命令中常用按鍵以及用途 1. 命令概述 Linux提供了豐富的幫助手冊&#xff0c;當你需要查看某個命令的參數時不必到處上網查找&#xff0c;只要man一下即…

MySQL六 | 索引

目錄 索引 優缺點 結構 語法 創建索引 查看索引 刪除索引 索引 索引是幫助數據庫高效獲取數據的數據結構。如果沒有設置索引會進行全表掃描&#xff0c;性能較低。 優缺點 優點缺點提高數據檢索的效率&#xff0c;降低數據的IO成本索引列也是要占用空間的通過索引列對數…

viewPager的adapter--FragmentInstancePagerAdapter

之前分享過幾個tabviewPager的庫。。這種東西開發中特別常見。今天抽空補一個viewPager的adapter。用來搭配使用 創建FragmentInstancePagerAdapter,如下&#xff1a; mport androidx.fragment.app.Fragment import androidx.fragment.app.FragmentManager import androidx.f…

AI降重軟件,AI降重后原創高質量文章

在當今信息爆炸的時代&#xff0c;寫作與創作的重要性日益凸顯。隨著大量內容的涌現&#xff0c;文章降重成為了許多作者和內容創作者的一大問題。本文將專心分享該軟件的優勢&#xff0c;并為廣大用戶推薦幾款好用的AI降重軟件。 AI降重使用場景 AI降重技術利用機器學習算法和…

OpenCV圖像相似性比對算法

背景 在做圖像處理或者計算機視覺相關的項目的時候&#xff0c;很多時候需要我們對當前獲得的圖像和上一次的圖像做相似性比對&#xff0c;從而找出當前圖像針對上一次的圖像的差異性和變化點&#xff0c;這需要用到OpenCV中的一些圖像相似性和差異性的比對算法&#xff0c;在O…

使用LangSmith來快速學習LangChain

好風憑借力&#xff0c;送我上青云&#xff01; 什么是LangSmith LangSmith is a platform for building production-grade LLM applications. It lets you debug, test, evaluate, and monitor chains and intelligent agents built on any LLM framework and seamlessly int…

Python學習路線 - Python語言基礎入門 - 循環語句

Python學習路線 - Python語言基礎入門 - 循環語句 前言為什么學習循環語句 while循環的基礎語法while循環語句while循環注意點 while循環的基礎案例while循環的嵌套應用while循環的嵌套 while循環的嵌套案例補充知識 - print輸出不換行補充知識 - 制表符\t練習案例 - 打印九九乘…

創建dockerSwarm nfs掛載

創建dockerSwarm nfs掛載 nfs高可用部署(lsyncd兩主機雙向同步) nfs高可用部署(lsyncd三主機三向同步) 1. 通過 Volume 1.1 創建 Docker Volume 每個 swarm 節點均創建相同名稱的 Docker Volume&#xff08;名稱為 nfs120&#xff09; docker volume create --driver local …

算法:進制之前的轉換

1. X進制轉換成十進制-V1&#xff1a; /*** 笨辦法&#xff0c;從左往右開始* Tips&#xff1a;只支持正數** param num* param radix* return*/private static Integer xToTenV1(String num, Integer radix) {if (num.length() 0 || num.charAt(0) -) {throw new IllegalArg…

外貿找客戶軟件工具:BotMaster 18.5 Crack

BotMaster 拓展您的業務大師增加銷量Whatsapp營銷&#xff0c;使用 BotMaster 將您的業務提升到新的水平 - 最強大的 WhatsApp 營銷軟件&#xff0c;可促進銷售和發展您的業務。 BotMaster 是一款革命性的 WhatsApp 營銷工具&#xff0c;于 2022 年 1 月推出。這款功能強大的工…