1. 程式人生 > >1、嵌入式Linux開發環境搭建

1、嵌入式Linux開發環境搭建

什麽 技術 串口 程序 環境 str ORC arm 上進


1、前提準備

  • 硬件環境:
    筆記本電腦
  • 軟件環境:
    裸機安裝Windows10_64位
    VMWare版本:VMWare WorkStation 14Pro
    Ubuntu版本:Ubuntu16.04LTS

總結:開發環境是主機安裝windows10家庭版,然後使用vmware創建Ubuntu虛擬機,在windows10進行代碼的編寫開發,在Ubuntu上進行部署編譯。具體安裝創建方法【待補充】

2、共享文件夾與samba服務器創建。

因為我是在windwows上開發,Ubuntu編譯。因此windwows之間的文件共享是非常重要的。通常有兩種方式:samba服務器或者共享文件夾

2.1 共享文件夾與VMtools

2.1.1 作用

VMtools是Vmware的一組工具。主要用於虛擬主機顯示優化與調整,另外還可以方便虛擬主機與本機的交互,如允許共享文件夾,甚至可以直接從本機向虛擬主機拖放文件、鼠標無縫切換、顯示分辨率調整等,十分實用。
通過共享文件夾,我們可以很方便的在Windows和Ubuntu之間同步的傳輸更改文件。

2.1.2 搭建步驟

  • [ ] (1),解決VMtools安裝的問題

    • 步驟1:點擊vmware菜單項中的虛擬機--->設置--->選項-->共享文件夾
      技術分享圖片
      錯誤原因:需要在客戶機操作系統中安裝了最新版本的 VMware Tools。

    • 步驟2:點擊vmware菜單項中的虛擬機--->重新安裝VMwareTool工具。


      現象:技術分享圖片

    • 步驟3:點擊DVD-->open 【裏面有一個WMwareTools-xx.xx.tar.gz壓縮包】,將此壓縮包復制到Documents目錄下。關閉這個對話框
      技術分享圖片

    • 步驟4:用快捷鍵ctrl+Alt+T創建一個新終端,執行以下命令

      • cd Documents/ 進入Documents目錄
      • ls 查看【發現有剛剛復制進入的WMtool文件夾】
      • tar xvf VMwareTools-10.2.0-7259539.tar.gz 解壓【現象是出現了vmware-tools-distrib文件夾】
      • cd vmware-tools-distrib/
      • sudo ./vmware-install.pl 【一直選擇enter默認】
    • 步驟5:關機重啟確保運行了最新版本的VMware tools。

  • [ ] (2),創建共享文件夾

    • 步驟1:點擊vmware菜單項中的虛擬機--->設置--->選項-->共享文件夾--->總是啟用--->添加【出現共享文件夾向導對話框】--->下一步
      技術分享圖片

    • 步驟2:選擇主機路徑--->瀏覽---->【自己在Windows下創建一個文件夾用來做共享目錄,這裏的我起名位winshare】--->確定--->下一步
      技術分享圖片

    • 步驟3:選擇啟動此共享【必須】---->完成
      技術分享圖片

    • 步驟4. 這個時候我們可以看到出現了共享文件夾目錄路徑,然後點擊確定。
      技術分享圖片

  • [ ] (3),測試共享文件夾是否創建成功。
    • 步驟10:用快捷鍵ctrl+Alt+T創建一個新終端。

      • cd /mnt/hgfs
      • ls 【可以看到創建的共享目錄名字,我的是winshare】
      • touch a.c 【創建一個a.c的文件,如果在Windows下也出現a.c說明創建成功】

2.2 搭建samba服務器

2.2.1 samba作用

       Samba是在Linux和UNIX系統上實現SMB協議的一個免費軟件,由服務器及客戶端程序構成。它可以實現windows和Unix-Like兩個平臺之間互相分享文檔和數據。
       Samba服務器的工作原理是:客戶端向Samba服務器發起請求,請求訪問共享目錄,Samba服務器接收請求,查詢smb.conf文件,查看共享目錄是否存在,以及來訪者的訪問權限,如果來訪者具有相應的權限,則允許客戶端訪問,最後將訪問過程中系統的信息以及采集的用戶訪問行為信息存放在日誌文件中。

2.2.2 操作步驟

  • [ ] (1),確定ubuntu能上網

  • [ ] (2),安裝samba

        sudo apt-get install samba
  • [ ] (3),測試是否安裝成功

        smb[按TAB TAB補全]

技術分享圖片

  • [ ] (4),配置samba

        cd /home/aston
        mkdir sambashare               //在home/aston下創建sambashare文件夾
        cd /etc/samba/
        sudo cp smb.conf smb.cong.bkp  //配置samba配置文件
        sudo vi smb.conf  //確保裏面的內容與下面一致
    
                [share]
                comment=samba    ##這個是說明,隨意填
                path=/home/aston/sambashare
                public=yes
                create mask=0777
                directory mask=0777
                writable=yes
                available=yes
                ##要能修改文件夾,要麽就將/var/www/html權限設置為777,或者加上如下設置
                forceuser=root
                forcegroup=root
  • [ ] (5),重啟samba

        sudo /etc/init.d/smbd restart   【現象是:[ ok ] Restarting smbd (via systemctl): smbd.service.】
        ifconfig      【發現Ubuntu的ip地址是:192.168.1.112】
  • [ ] (6),windows下訪問samba服務器

    • 步驟:此電腦--->\192.168.1.112--->Enter回車鍵:發現出現了一個share文件夾
      技術分享圖片
  • [ ] (7),測試

    • 步驟1:在share文件夾下創建一個test.txt。
    • 步驟2:ubuntu中 cd sambashare/,ls發現出現了一個test.txt

2.3 使用總結

在嵌入式開發中,如果要實現windows和ubuntu之間的文件共享,從開發的方便程度來看,能用共享文件夾就不要用samba。

3、虛擬機上網配置

虛擬機如果要從網上獲取資源,就要能夠訪問外網。虛擬機有三種上網方式:橋接上網,NAT上網,單主機模式【沒用過】。本節從原理和操作2個方面講了NAT方式和橋接方式這2種不同的虛擬機上網模式。

3.1、 原理

3.1.1 NAT 方式上網

在NAT模式下,虛擬系統需要借助NAT(網絡地址轉換)功能,通過宿主機器所在的網絡來訪問公網。也就是說,使用NAT模式虛擬系統可把物理主機作為路由器訪問互聯網。(虛擬機在主機的下一級)
NAT網絡環境下需要做到:
(1)主機需要開啟vmdhcp和vmnat服務。(服務的開啟,在我的電腦當中右鍵“管理”可以設置)
(2)NAT模式下的虛擬機的TCP/IP配置信息將由VMnet8(NAT)虛擬網絡的DHCP服務器自動分配,需要開啟DHCP功能。

3.1.2 橋接方式上網

在橋接模式下,VMWare虛擬出來的操作系統就像是局域網中的一臺獨立的主機(主機和虛擬機處於對等地位,直接與外網通信),它可以訪問該類網段內任何一臺機器。
橋接網絡環境下需要做到:
(1)手動為虛擬機系統配置IP地址、子網掩碼。
(2)在橋接的模式下虛擬機必須與物理機處於同一網段,(舉個例子,物理機IP:192.168.1.2,虛擬機IP:192.168.1.3)這樣虛擬系統才能和真實主機進行通信。

技術分享圖片
圖像來源:https://jingyan.baidu.com/article/546ae1852778811149f28c8c.html

3.2、 操作步驟

3.2.1 NAT 方式上網

  • [ ] (1),確定本地windows電腦能夠上網(我的電腦是無線上網)
  • [ ] (2),虛擬機選擇“設置--->網絡適配器[NAT模式]--->確定”
    技術分享圖片
  • [ ] (3),虛擬機ubuntu設置為dhcp方式。
    • 步驟1:打開一個終端,執行命令:sudo vi /etc/network/interfaces。
    • 步驟2:轉為編輯模式,編譯內容保存推出:
interfaces(5) file used by ifup(8) and ifdown(8)
auto lo
iface lo inet loopback
#auto ens33
#iface ens33 inet static          //靜態分配ip        
iface ens33 inet dhcp            //動態分配ip    
address 192.168.1.141
netmask 255.255.255.0
gateway 192.168.1.1
  • [ ] (4),重啟網卡得到合法的IP地址。
    • 步驟0:打開終端,執行以下命令
    • 步驟1:sudo ifdown ens33 【功能:關閉網卡】
    • 步驟2:sudo ifup ens33 【功能:開啟網卡】
    • 步驟3:ifconfig 【功能:查看是否成功分配ip地址,dhcp分配ip地址是隨機分配的】
      • 我的現象:ens33 Link encap:Ethernet HWaddr 00:0c:29:24:c8:03
        inet addr:192.168.133.128 Bcast:192.168.133.255 Mask:255.255.255.0
  • [ ] (5),終端輸入ping www.baidu.com 測試=是否能夠上網。

3.2.2 橋接方式上網

  • [ ] (1),確定本地windows電腦能夠上網(我的電腦是無線上網)
  • [ ] (2),虛擬機選擇“設置--->網絡適配器[橋接模式]--->確定”
  • [ ] (3),虛擬機選擇“編輯-->虛擬網絡編譯器-->更改設置-->橋接到無線網卡(因為我是無線上網)-->確定”
    技術分享圖片
    • Inter(R) Ethernet Connection[有線網卡]
    • Inter(R) Wireless-N[無線網卡]
  • [ ] (4),打開虛擬機終端,輸入sudo vi /etc/network/interfaces,選擇dhcp動態分配IP,然後重啟網卡。
    • 具體操作參考3.2.1 NAT 方式上網
  • [ ] (5),執行命令ping www.baidu.com測試虛擬機是否能夠上網。

驗證:ifconfig得到Ubuntu的ip192.168.1.112,而我的電腦ip無線上網為192.168.1.109,他們在同一個網段。

3.3 使用總結

在嵌入式開發中,如果虛擬機要實現上網,建議使用NAT方式訪問外網[最簡單]。橋接方式一般用來和開發板通信。
註意:主機一定要能上網。

4.Ubuntu連接開發板的網絡設置

關鍵點:橋接到有限網卡;使得開發板,window主機,ubuntu在同一局域網中。也就是設置PC機、虛擬機、以及開發板的IP在同一個網段【同一局域網】,即192.168.1.*,其他掩碼、網關、DNS都設置一樣。

相關操作如下:
  • [ ] (1),虛擬機配置ip地址為192.168.1.141
    • 步驟1:虛擬機選擇“設置--->網絡適配器[橋接模式]--->確定”
    • 步驟2:虛擬機選擇“編輯-->虛擬網絡編譯器-->更改設置-->橋接到有線網卡-->確定”
    • 步驟3:終端執行sudo vi /etc/network/interfaces,選擇靜態ip地址分配
      技術分享圖片
    • 步驟4:重啟網卡
    • 步驟5:ifconfig
      技術分享圖片

註意:在開發過程中,發現一個bug,如果靜態IP地址分配失敗,請重啟ubuntu再進行設置

  • [ ] (2),WindowsPC機的IP配置為192.168.1.20
    • 步驟1:打開網絡共享中心
      技術分享圖片
    • 步驟2:選擇“更改適配器設置-->以太網-->屬性-->TCP/IPv4--->手動制定ip地址--->確定”
      技術分享圖片
  • [ ] (3),開發板配置ip地址為192.168.1.10
    • 步驟1:用網線,串口線將開發板與電腦連接起來
    • 步驟2:securtCRT與開發板串口連接[具體步驟見SecurtCRT軟件的使用]
    • 步驟3:虛擬機開機,進入uboot模式,執行以下命令
      • set ipaddr 192.168.1.10
      • set serverip 192.168.1.141
      • set netmask 255.255.255.0
      • save
      • print 【分別對照上面3個環境變量ipaddr、serverip、netmask 看是否一致】
  • [ ] (4),測試Ubuntu與開發板能否相互ping通

      • 步驟1:在開發板的uboot模式下執行命令:
      ping 192.168.1.141

技術分享圖片
說明開發板能和ubuntu虛擬機ping通

-  - 步驟2:ubuntu終端執行

    ping 192.168.1.10

技術分享圖片
說明ubuntu能和開發板ping通

5. ubuntu中搭建tftp服務器

5.1 為什麽要安裝tftp服務器

TFTP(Trivial File Transfer Protocol,簡單文件傳輸協議),是一個基於 UDP 協議實現的用於在客戶機和服務器之間進行簡單文件傳輸的協議,適合於開銷不大、不復雜的應用場合。TFTP協議專門為小文件傳輸而設計,只能從服務器上獲取文件,或者向服務器寫入文件,不能列出目錄,也不能進行認證。
TFTP是用來下載遠程文件的最簡單網絡協議,在嵌入式開發中,由於嵌入式開發板資源有限,不能進行文件編譯,因此我們都是將寫好都代碼在宿主機(Linux虛擬機)上進行調試編譯好後生成二進制文件,然後通過tftp或NFS來進行傳輸到開發板上運行。也就是ARM開發板當做客戶端, 使用虛擬機 Ubuntu來當做服務器。

5.2 如何安裝tftp服務器

前提腳尖:使得虛擬機ubuntu能夠連接外網

  • [ ] (1), 安裝 tftp 所需的軟件

    • 步驟1:安裝 tftp-hpa,tftpd-hpa[前者是客戶端,後者是服務程序]:
      • 在終端下輸入

      sudo apt-get install tftp-hpa tftpd-hpa

    • 步驟2:安裝xinetd[xinetd是新一代的網絡守護進程服務程序,又叫超級Internet服務器,常用來管理多種輕量級Internet服務] :
      • 在終端下輸入

      sudo apt-get install xinetd

  • [ ] (2),配置相關服務。

終端執行命令sudo vi /etc/xinetd.conf,查看內容是否與下面的一致,若不一致則修改:

    # Simple configuration file for xinetd
    ##
    Some defaults, and include /etc/xinetd.d/
    defaults
    {
       #Please note that you need a log_type line to be able to use log_on_success
       # and log_on_failure. The default is the following :
       # log_type = SYSLOG daemon info
    }
    includedir /etc/xinetd.d
  • [ ] (3),配置 tftp 服務器

終端執行命令sudo vim /etc/default/tftpd-hpa,將內容修改成

# /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/tftpboot"
 sudo chmod 777 /tftpboot
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="-l -c -s"
  • [ ] (4),配置/etc/xinetd.d/tftp

然後進入 xinetd.d 文件夾(cd /etc/xinetd.d),查看是否有一個 tftp 文件,如果沒有就新建一個,如果有的話就查看內容是否與下面的一致,不一致則修改(sudo vi tftp),內容如下:

service tftp
{
socket_type = dgram
wait = yes
disable = no
user = root
protocol = udp
server = /usr/sbin/in.tftpd
server_args = -s /tftpboot
#log_on_success += PID HOST DURATION
#log_on_failure += HOST
per_source = 11
cps =100 2
flags =IPv4
}

其中 server_args 一行是配置服務器的文件存放的位置,就是進行 tftp 傳輸的時候,都是從該文件夾中搜索文件的

  • [ ] (5),修改權限

終端執行以下命令:

- sudo chmod 777 /tftpboot
  • [ ] (6),重啟

終端執行以下命令:

- sudo service tftpd-hpa restart
- sudo /etc/init.d/xinetd reload
- sudo /etc/init.d/xinetd restart
  • [ ] (7), 本地測試tftp服務器成功搭建
    技術分享圖片

6.ubuntu中搭建nfs服務器

6.1 為什麽要搭建nfs服務器

NFS 就是 Network FileSystem 的縮寫,最早之前是由sun 這家公司所發展出來的。它最大的功能就是可以透過網絡,讓不同的機器、不同的操作系統、可以彼此分享文件。NFS可以讓你的PC通過網絡將遠端的NFS 服務器共享出來的文件mount到自己的系統中,在客戶端看來使用NFS的遠端文件就象是在使用本地文件一樣。 使用NFS可以使應用程序的開發變得十分方便, 客戶端不需要大容量的存儲器,更不需要進行映像文件的燒錄和下載,只要mount到服務器端的特定目錄下,然後運行該目錄下的程序即可觀察到結果。嵌入式項目中常用nfs來掛載文件系統。

6.2 如何搭建nfs服務器

  • [ ] (1),安裝nfs服務器

終端執行以下命令:

sudo apt-get install nfs-kernel-server
sudo apt-get install nfs-common
  • [ ] (2),將nfs服務器掛載到/home/aston/rootfs

    • 步驟1:在/home/aston下創建rootfs:

終端執行以下命令:

    mkdir rootfs
    cd rootfs
    pwd(顯示/home/aston/rootfs)      
                    
- 步驟2:配置/etc/exports

終端執行以下命令:

    sudo vi /etc/exports

在命令行終端添加:

    /home/aston/rootfs *(rw,sync,no_root_squash,no_subtree_check)
  • [ ] (3),進入/home/aston目錄修改rootfs的權限

終端執行以下命令:

    cd .. 
    chmod 777 -R rootfs/
  • [ ] (4), 更新導出nfs服務器到本地並重啟nfs服務

終端執行以下命令:

    sudo showmount -e
    sudo exportfs -r(更新)
    sudo showmount localhost -e(導出本地/home/aston/rootfs)
    sudo /etc/init.d/nfs-kernel-server restart(重啟nfs服務)
  • [ ] (5),測試nfs服務器是否成功掛載到了/home/aston/rootfs

終端執行以下命令:

    sudo mount -t nfs -o nolock localhost:/home/aston/rootfs /opt  【功能:將nfs服務器掛載到opt目錄下】

    cd rootfs/
    touch a.c
    ls /opt(顯示a.c,rootfs目錄下的掛載點opt目錄下同步了,證明本地測試成功)

具體nfs相關參考:https://blog.csdn.net/tigerjibo/article/details/9748561

1、嵌入式Linux開發環境搭建