1. 程式人生 > 其它 >Linux:宿主機與目標機的tftp和nfs環境搭建

Linux:宿主機與目標機的tftp和nfs環境搭建

技術標籤: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地址