天天看點

20145219《資訊安全系統設計基礎》實驗二 固件開發20145219《資訊安全系統設計基礎》實驗二 固件開發

20145219《資訊安全系統設計基礎》實驗二 固件開發

實驗報告封面

  • 小組成員:201452114張甯、20145219宋歌
    20145219《資訊安全系統設計基礎》實驗二 固件開發20145219《資訊安全系統設計基礎》實驗二 固件開發
    20145219《資訊安全系統設計基礎》實驗二 固件開發20145219《資訊安全系統設計基礎》實驗二 固件開發

實驗内容與步驟

1、配置開發環境(同實驗一)

  • 連接配接arm開發闆
  • 建立超級終端
  • 啟動實驗平台(redhat虛拟機)
  • 配置同網段IP
  • 安裝arm編譯器(bc共享檔案夾)
  • 配置環境變量(redhat虛拟機中)

2、導入實驗代碼

  • 将實驗所需代碼拷貝到bc共享檔案夾中

    實驗代碼在老師提供的

    02_pthread

    03_tty

    檔案夾中
    20145219《資訊安全系統設計基礎》實驗二 固件開發20145219《資訊安全系統設計基礎》實驗二 固件開發

3、在虛拟機中編譯代碼

  • 對于多線程相關的代碼,編譯時需要加-lpthread 的庫。
    • 編譯pthread.c
      20145219《資訊安全系統設計基礎》實驗二 固件開發20145219《資訊安全系統設計基礎》實驗二 固件開發
    • 編譯term.c
      20145219《資訊安全系統設計基礎》實驗二 固件開發20145219《資訊安全系統設計基礎》實驗二 固件開發

4、下載下傳調試

  • 在超級終端中運作可執行檔案pthread
    20145219《資訊安全系統設計基礎》實驗二 固件開發20145219《資訊安全系統設計基礎》實驗二 固件開發
  • 在超級終端中運作可執行檔案term
    20145219《資訊安全系統設計基礎》實驗二 固件開發20145219《資訊安全系統設計基礎》實驗二 固件開發

實驗過程中遇到的問題及解決過程

  • 問題1:在虛拟機中使用

    armv4l-unknown-linux-gcc pthread.c -o pthread -lpthread

    指令編譯pthread.c檔案時出錯,提示

    bash:armv4l-unknown-linux-gcc:command not found

  • 解決方法:經過了解錯誤提示,發現是環境變量沒有配置成功,進入

    /root/.bash_profile

    重新配置後即可編譯成功(先開始hello.c也沒編譯通過,我們一時沒有想到解決方法就繼續向後做了,後來改正這個錯誤後都編譯成功了)
    20145219《資訊安全系統設計基礎》實驗二 固件開發20145219《資訊安全系統設計基礎》實驗二 固件開發
  • 問題2:在超級終端運作可執行檔案

    term

    時出錯,提示

    /dev/ttyS0: No such file or directory

  • 解決方法:老師給的實驗指導書中說:這個問題是因為在 Linux 下序列槽檔案位于/dev 下,一般在老版本的核心中序列槽一為/dev/ttyS0 ,序列槽二為 /dev/ttyS1, 在我們的開發闆中序列槽裝置位于/dev/tts/下,因為開發闆中沒有ttyS0這個裝置,是以我們要建立一個連接配接。解決方法就是按照實驗指導書說的在超級終端中進入/dev檔案夾中,輸入指令

    ln –sf /dev/tts/0 ttyS0

    (注意空格與字母l、數字0。)
    20145219《資訊安全系統設計基礎》實驗二 固件開發20145219《資訊安全系統設計基礎》實驗二 固件開發

實驗過程的了解

  • pthread.c分析

    先設定一個整數的圓形緩沖區,并初始化緩沖區(初始化緩存指針資訊(信号量)),再向緩沖區中寫入一個整數,接着從緩沖區中讀出一個整數(此步驟與寫入類似),然後實作一個生産者程式:生産者線程不斷順序地将0到1000的數字寫入共享的循環緩沖區,當生産-1時,程式終止;或者消費掉緩存中生産出來的資料:消費者線程不斷地從共享的循環緩沖區讀取資料,當消費-1時,程式終止。最後,等待生産者、消費者程序結束。

    這個代碼是

    生産者-消費者問題模型

    的實作。
  • term.c分析

    先通過标準的檔案打開函數打開序列槽,接着設定序列槽,包括:波特率設定、效驗位和停止位設定(序列槽的設定主要是設定struct termios結構體的各成員值),然後把序列槽當作檔案讀寫,最後關閉序列槽。

實驗體會

本次實驗是《實驗二:固件開發》,從實驗的操作流程上看,這次實驗與實驗一的步驟基本相同,唯一的不同就是編譯.c檔案時的指令加了參數

-lpthread

,這是因為本次實驗的兩個代碼是與多線程相關的代碼,編譯時需要加-lpthread 的庫。我覺得這次實驗的重點應該是在實驗一的基礎上熟練掌握開發流程,并讀懂實驗示例代碼。這兩個代碼明顯比我們第一次實驗的hello.c複雜了n倍,其中所包含的知識點也有很多,需要花時間去了解和體會。實驗課堂上可能缺乏充足的時間和安靜的環境讓我們了解代碼,是以,我們要利用課下的時間把這方面完成。

轉載于:https://www.cnblogs.com/20145219songge/p/6057021.html