2019-2020-1 20175302_20175314_20175316 《信息安全系統設計基礎》實驗一 開發環境的熟悉

2019-2020-1 20175302_20175314_20175316 《信息安全系統設計基礎》實驗一 開發環境的熟悉

1、實驗內容

  • 交叉編譯環境
  • 目標機宿主機聯通
  • 目標機運行程序
  • 目標機模塊分解
  • 清理工做

2、實驗步驟

(一)交叉機編譯環境

  • 安裝老師提供的software目錄中的「VMware-workstation-full-10.0.1-1379776.exe」
  • 解壓老師提供的software目錄中的「Ubuntu1204.rar」
  • 用VMWare打開Ubuntu,用戶名:linux,口令:1
  • 創建實驗目錄mkdir linux_20175302_20175314_20175316
  • 在實驗目錄中編寫hello world程序,另外補充幾行打印全部組員的學號姓名
#include <stdio.h>
int main(){
    printf("HelloWorld!\n");
    printf("20175302_20175314_20175316\n");
    return 0;
}

用gcc編譯hello.c
gcc -o linuxhello hello.c
用交叉編譯器"arm-none-linux-gnuenbi-gcc"編譯hello.c
/usr/local/toolchain/toolchain4.3.2/bin/arm-none-linux-gnuenbi-gcc hello.c -o armhellohtml

(二)目標機宿主機聯通

  • 在實驗室把「USB轉串口線」的USB插入實驗室電腦
  • 用超級終端(Win7虛擬機中)做爲實驗箱的顯示終端
  • 用ifconfig在超級終端中查看實驗箱IP(目標機):192.168.0.232,在Ubuntu中(宿主機)中用ifconfig在命令行中查看IP:192.168.0.230
  • 用網線鏈接實驗室臺式機和ARM實驗箱的網口NET1
  • 在超級終端中輸入ping 192.168.0.230(UbuntuIP),在Ubuntu命令行中輸入ping 192.168.0.232(超級終端IP),用ping命令保證目標機和宿主機能互相ping通

(三)目標機運行程序

  • 在超級終端中運行mount -t nfs -o nolock 192.168.0.230:/home/linux/exp /exp經過NFS把宿主機中的/home/linux/exp 映射到目標機中的/exp
  • 在超級終端中cd /exp
  • 在超級終端中./armhello運行armhello

(四)目標機模塊分解

  • 在目標機上重現系統調用版myod
  • 以靜態庫或共享庫的方式在目標機上重現myod

(五)清理工做

  • 實驗結束後,把實驗室原來的網線插回

3、實驗過程當中遇到的問題和解決方案

  • 問題1:bash: /usr/local/toolchain/toolchain4.3.2/bin/arm-none-linux-gnuenbi-gcc: 沒有那個文件或目錄

  • 解決方案:

下載安裝最新Linux解壓版ARM交叉編譯工具linux

②將arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2拷貝至虛擬機/usr/local文件夾執行如下命令c++

cd /usr/local
tar -jxvf arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2

③配置環境變量使其生效shell

sudo vim /etc/bash.bashrc

選擇文件末行(64行),按鍵盤上的o鍵,在光標所在行下新增一行(65行)插入vim

export PATH=$PATH:/usr/local/arm-2014.05/bin/

最後執行安全

source /etc/bash.bashrc

④測試,輸入bash

arm-none-linux-gnueabi-gcc -v1

若是出現: No such file or directory,則是由於64位Ubuntu與32位軟件不相容,輸入服務器

sudo apt-get install lib32z1 lib32ncurses5 libbz2-1.0:i386 lib32stdc++6  12

從新輸入網絡

arm-none-linux-gnueabi-gcc -v

⑤編譯,輸入工具

arm-none-linux-gnueabi-gcc -static -o armhello hello.c

  • 問題2:登錄終端error,win7虛擬機和實驗箱ping不通

  • 解決方案:接口差錯,實驗箱鏈接modo1

4、實驗體會與總結

交叉編譯:

  • 搭建交叉編譯環境,即安裝、配置交叉編譯環境變量。在該環境下編譯出嵌入式Linux系統所需的操做系統、應用程序等,而後再上傳到目標機上。
  • 交叉編譯工具鏈是爲了編譯、連接、處理和調試跨平臺體系結構的程序代碼,簡單來講,就是在一個平臺上生成另外一個平臺上的可執行代碼。
  • gcc和arm-linux-gcc的區別是:gcc是linux下的C語言編譯器,編譯出來的程序在Ubuntu虛擬機上執行,而arm-linux-gcc用來在linux下跨平臺的C語言編譯器,編譯出來的程序在目標機(如ARM平臺)上執行,嵌入式開發應使用嵌入式交叉編譯工具鏈。

宿主機與目標機

  • 在嵌入式開發過程當中,宿主機是執行編譯、連接嵌入式軟件的計算機。
  • 目標機是運行嵌入式軟件的硬件平臺。一般宿主機就是PC機,而本次實驗中的目標機是ARM實驗箱。
  • 在宿主機上編譯連接生成的可執行程序須要放到目標機上運行經過串口、網絡、USB下載到目標機上,運行程序armhello。

NFS(Network File system)

  • 網絡文件系統:使咱們可以達到文件在不一樣系統間的共享。當用戶想使用遠程文件時只要用「mount」命令就可把遠程文件系統掛接在本身的文件系統之下,使遠程的文件與使用本地計算機上的文件同樣。
  • 在計算機A上,執行命令mount B的IP地址:/home/linux/exp /exp,把計算機B上的/home/linux/exp掛接到A上的/exp
  • 當客戶機掛接一個目錄或文件時,並非說複製服務器上的這一個目錄或文件到本地的計算機上,而是在使用時從服務器上讀取文件到本地的內存中,所以,能夠用cd進入這一個掛接到的目錄,就如同進入本地的目錄同樣。

超級終端

  • 計算機顯示終端,是計算機系統的輸入、輸出設備。

file命令

  • file用來探測指定文件的類型,在終端中輸入file exe.c:
  • 語法:file 選項 參數
  • 選項:
-b:列出辨識結果時,不顯示文件名稱;
-c:詳細顯示指令執行過程,便於排錯或分析程序執行的情形;
-f<名稱文件>:指定名稱文件,其內容有一個或多個文件名稱時,讓file依序每列一個文件名稱辨識這些文件;
-L:直接顯示符號鏈接所指向的文件類別;
-m<魔法數字文件>:指定魔法數字文件; 
-v:顯示版本信息;
-z:解讀壓縮文件的內容。
  • 參數:要肯定類型的文件列表,多個文件之間使用空格分開,能夠使用shell通配符匹配多個文件。

5、參考資料

相關文章
相關標籤/搜索