Linux:宿主機與目標機的tftp和nfs環境搭建
阿新 • • 發佈:2020-12-30
技術標籤:Linux
文章目錄
宿主機(Ubuntu)配置交叉編譯環境
- Ubuntu裝的是64位的,交叉編譯工具一般是32位的,所以要安裝一些庫
sudo apt-get install u-boot-tools
sudo apt-get install lib32z1
sudo apt-get install lib32ncurses5
sudo apt-get install libncurses5-dev libncursesw5-dev
sudo apt-get install lib32stdc++6
sudo apt-get install libc6-dev
- 安裝SSH
sudo apt-get install openssh-server
sudo /etc/init.d/ssh start
- 安裝交叉編譯工具
sudo tar -jxvf arm-linux-gcc-4.3.2.tar.bz2 –C /
參考部落格:https://blog.csdn.net/qq_24601427/article/details/102983794
- 交叉編譯工具下的bin目錄新增到環境變數
#臨時設定
export PATH=$PATH:交叉編譯器路徑
#修改全域性配置
sudo vim /etc/profile
#修改使用者配置檔案
#通常是“~/.bashrc”或者“~/.bash_profile” 或者 “~/.profile”
安裝和配置TFTP
TFTP
- 安裝
#tftp-hpa是客戶端,tftpd-hpa是伺服器端
sudo apt-get install tftp-hpa tftpd-hpa
- 配置
#建立共享目錄
sudo mkdir /tftproot
#修改許可權
sudo chmod 777 /tftproot
- 修改tftp伺服器配置檔案
sudo vim /etc/default/tftpd-hpa3
#新增如下內容
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/tftproot" #修改為需要的路徑
TFTP_OPTIONS="-l -c -s" #通過mantftpd檢視各種引數的意義
TFTP_DIRECTORY="/srv/tftp"
- 重啟tftp,使其配置生效
sudo service tftpd-hpa restart
- 本地測試
$cd ~/tftpboot echo "hello tftp service">>a.txt
$echo "hello tftp service,put to tftp serive">>b.txt
$tftp localhost
tftp> get a.txt
tftp> put b.txt
tftp> quit
#其中get是取得檔案,put是將檔案上傳到TFTP伺服器上
xinetd和TFTP
- 安裝
#xinetd是新一代的網路守護程序服務程式
sudo apt-get install xinetd
sudo apt-get install tftp tftpd
- 配置
vi /etc/xinetd.d/tftp
#使用命令:"vi /etc/xinetd.d/tftp"建立TFTP配置檔案
#向檔案中寫入如下程式碼
#必須按照格式嚴格對齊
server tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /tftproot
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}
#server_args設定的/var/tftproot目錄是tftp伺服器的目錄
- 重啟xinetd服務
sudo /etc/init.d/xinetd restart
安裝和配置NFS
安裝NFS服務端
- 安裝
#服務端
sudo apt install nfs-kernel-server
- 建立共享目錄
sudo mkdir -p /tmp
sudo mkdir -p /data
sudo mkdir -p /logs
- nfs配置
#編輯/etc/exports 檔案
sudo vim /etc/exports
#新增內容
/tmp *(rw,sync,no_subtree_check,no_root_squash)
/data *(rw,sync,no_subtree_check,no_root_squash)
/logs *(rw,sync,no_subtree_check,no_root_squash)
#/home :共享的目錄
#* :指定哪些使用者可以訪問
# * 所有可以ping同該主機的使用者
# 192.168.1.* 指定網段,在該網段中的使用者可以掛載
# 192.168.1.12 只有該使用者能掛載
#(ro,sync,no_root_squash): 許可權
# ro : 只讀
# rw : 讀寫
# sync : 同步
# no_root_squash: 不降低root使用者的許可權
# 其他選項man 5 exports 檢視
- 重啟NFS服務
sudo /etc/init.d/nfs-kernel-server restart
- 常用命令工具
#顯示已經mount到本機nfs目錄的客戶端機器。
sudo showmount -e localhost
#將配置檔案中的目錄全部重新export一次!無需重啟服務。
sudo exportfs -rv
#檢視NFS的執行狀態
sudo nfsstat
#檢視rpc執行資訊,可以用於檢測rpc執行情況
sudo rpcinfo
#檢視網路埠,NFS預設是使用111埠。
sudo netstat -tu -4
安裝NFS客戶端
- 安裝
#客戶端
sudo apt install nfs-common
- 檢視NFS伺服器上的共享目錄
#顯示指定的(192.168.3.167)NFS伺服器上export出來的目錄
sudo showmount -e 192.168.3.167
- 建立本地掛載目錄
sudo mkdir -p /mnt/data
sudo mkdir -p /mnt/logs
- 掛載共享目錄
#將NFS伺服器192.168.3.167上的目錄,掛載到本地的/mnt/目錄下
sudo mount -t nfs 192.168.3.167:/data /mnt/data
sudo mount -t nfs 192.168.3.167:/logs /mnt/logs
目標機啟動執行
編譯uImage
- 解壓核心程式碼
tar -xvf linux-3.14.tar.xz
- 設定交叉編譯工具鏈
#編輯原始碼頂層Makefile
vim Makefile
#修改內容
#ARCH = arm
#CROSS_COMPILE = arm_none_linux_gnueabi-
- 選擇一個soc
make exynos_defconfig
#cp -raf arch/arm/configs/exynos_defconfig .config
- 核心原始碼配置(核心裁剪)
make menuconfig
- 進入核心原始碼目錄
#需要使用到工具mkimage,存放到宿主機/usr/bin/
make uIamge -j2
編譯裝置樹
裝置樹存放路徑:linux-3.14/arch/arm/boot/dts
- 修改linux-3.14/arch/arm/boot/dts路徑下的Makefile
vim linux-3.14/arch/arm/boot/dts/Makefile
#修改對應的內容
- 編譯裝置樹
#回到原始碼根目錄
make dtbs
- 替換目標機的dtb檔案
通過TFTP啟動核心
- 將uImage和dtb檔案放入宿主機ubuntu系統中的/tftproot
#在原始碼根目錄
cp -raf arch/arm/boot/uIamge /tftpboot
cp -raf arch/arm/boot/dts/exynos4412-fs4412.dtb /tftpboot
- 在開發板中設定uboot引數,使其能夠載入核心
#目標機輸入命令
set ipaddr 192.168.7.22 #目標機的IP地址
set serverip 192.168.7.21 #宿主機的IP地址
set bootcmd tftp 0x410000000 uImage \;tftp 0x42000000 exynos4412-fs4412.dtd \;bootm 0x41000000 - 0x42000000
save
通過NFS掛載rootfs系統
- 解壓跟檔案系統rootfs.tar.xz,到宿主機的nfs目錄下
sudo tar -xvf rootfs.tar.xz -C /opt/4412/
- 配置宿主機的nfs伺服器,讓/opt/4412/rootfs可以被掛載
sudo vim /etc/exports
#新增內容
#/opt/4412/rootfs *(subtree_check,rw,no_root_aquash,async)
#重啟nfs服務
sudo service nfs-kernel-server restart
- 在目標機指定核心通過網路掛載根檔案系統
#目標機輸入命令
set bootargs console=ttySAC2,115200 init=/linuxrc root= /dev/nfs rw nfsroot=192.168.7.21:/opt/4412/rootfs ip=192.168.7.22
save
#bootargs uboot傳遞給核心的啟動引數,是字串
# console=xxx 核心啟動時的除錯資訊輸出端
# root=xxx 核心根檔案系統路徑
# root=/dev/nfs 表示根檔案系統在網路遠端
# nfsroot=IP:path
#ip=xxx 目標機開機時的ip地址