嵌入式Linux系統基礎知識

一、嵌入式Linux系統的構成
1、硬件
2、內核
3、應用程序(形成根文件系統)
二、構建嵌入式Linux系統的主要任務
1、內核部分
2、應用程序部分

嵌入式Linux的開發大致可分為三個層次:引導裝載內核構造文件系統和圖形用戶界面。作為操作系統重要組成部分的文件系統,決定了操作系統本身的信息和用戶的數據在存儲設備上的組織形式。對嵌入式文件系統的研究、設計和開發也逐漸成為嵌入式系 統研究領域的一個方向。

三、內核精簡

在精簡內核在編譯內核之前,首先要明確需要那些驅動和模塊,然后只選擇需要的驅動和模塊
例如,如果系統不需要網絡支持,則可以去掉網絡模塊 。
內核一般是以壓縮方式存放的,在系統啟動時會自行解壓
核都是常駐內存的,當需要調用應用程序時,再把需要的程序從磁盤調入內存運行

?

構建嵌入式Linux系統-構建內核常用的命令包括:


  ◆ make config:內核配置,調用 ./scripts/Configure 按照 arch/i386/config.in 來進行配置。
  ◆ make dep:尋找依賴關系。
  ◆ make clean:清除以前構建內核所產生的所有目標文件、模塊文件、以及一些臨時文件等。
  ◆ make rmproper:刪除所有因構建內核過程中產生的所有文件,把內核恢復到最原始的狀態。
  ◆ make:構核,通過各目錄的Makefile 文件將會在各個目錄下產生許多目標文件。如果內核沒有錯誤,將產生文件vmlinux,這就是構建的內核。
  ◆ make zImage:在make 的基礎上產生壓縮的內核映象文件./arch/$(ARCH)/boot/zImage 以及在 ./arch/$(ARCH)/boot/compresed/目錄下產生臨時文件。
  ◆ make bzImage:在make 的基礎上產生壓縮比例更大的內核映象文件./arch/$(ARCH)/boot/bzImage 以及在 ./arch/$(ARCH)/boot/compresed/目錄下產生臨時文件。
  ◆ make modules:編譯模塊文件,在make config 時所配置的所有模塊將在這時編譯,形成模塊目標文件,并把這些目標文件存放在modules 目錄中。
  ◆ make modules_install:把上面編譯好的模塊目標文件放置在目錄 ./lib/modules/$KERNEL_VERSION/ 中。上面的編譯內核是在沒有改變源代碼的情況下實現的,如果覺得源代碼提供的功能在某些方面不能滿足要求,就要修改源代碼了。源代碼中主要有以下幾個關鍵部分:有關進程管理的task_struct 結構,這個結構幾乎包括了與進程有關的所有文件內容,還有任務隊列、時鐘管理和中斷管理,各種進程間的通信機制,內存管理中各種內存分配函數的實現,虛擬文件系統。

四、嵌入式系統的組成
? 1、嵌入式硬件(嵌入式處理器和嵌入式外圍設備)
? 2、嵌入式操作系統
? 3、嵌入式應用軟件
? 嵌入式處理器

嵌入式系統的核心是各種類型的嵌入式處理器,嵌入式處理器與通用處理器最大的不同點在于,嵌入式CPU大多工作在為特定用戶群所專門設計的系統中,它將通用CPU中許多由板卡完成的任務集成到芯片內部,從而有利于嵌入式系統在設計時趨于小型化,同時還具有很高的效率和可靠性。

嵌入式處理器的體系結構經歷了從CISC(復雜指令集)至RISC(精簡指令集)和Compact RISC的轉變,位數則由4位、8位、16位、32位逐步發展到64位。目前常用的嵌入式處理器可分為低端的嵌入式微控制器(Micro Controller Unit,MCU)、中高端的嵌入式微處理器(Embedded Micro Processor Unit,EMPU)、用于計算機通信領域的嵌入式DSP處理器(Embedded Digital Signal Processor,EDSP)和高度集成的嵌入式片上系統(System On Chip,SOC)。

目前幾乎每個半導體制造商都生產嵌入式處理器,并且越來越多的公司開始擁有自主的處理器設計部門,據不完全統計,全世界嵌入式處理器已經超過1000多種,流行的體系結構有30多個系列,其中以ARM、PowerPC、MC 68000、MIPS等使用得最為廣泛。

嵌入式外圍設備

在嵌入系統硬件系統中,除了中心控制部件(MCU、DSP、EMPU、SOC)以外,用于完成存儲、通信、調試、顯示等輔助功能的其他部件,事實上都可以算作嵌入式外圍設備。目前常用的嵌入式外圍設備按功能可以分為存儲設備、通信設備和顯示設備三類

存儲設備主要用于各類數據的存儲,常用的有靜態易失型存儲器(RAM、SRAM)、動態存儲器(DRAM)和非易失型存儲器(ROM、EPROM、EEPROM、FLASH)三種,其中FLASH憑借其可擦寫次數多、存儲速度快、存儲容量大、價格便宜等優點,在嵌入式領域內得到了廣泛應用。

目前存在的絕大多數通信設備都可以直接在嵌入式系統中應用,包括RS-232接口(串行通信接口)、SPI(串行外圍設備接口)、IrDA(紅外線接口)、I2C(現場總線)、USB(通用串行總線接口)、Ethernet(以太網接口)等。

由于嵌入式應用場合的特殊性,通常使用的是陰極射線管(CRT)、液晶顯示器(LCD)和觸摸板(Touch Panel)等外圍顯示設備。

嵌入式操作系統

為了使嵌入式系統的開發更加方便和快捷,需要有專門負責管理存儲器分配、中斷處理、任務調度等功能的軟件模塊,這就是嵌入式操作系統。嵌入式操作系統是用來支持嵌入式應用的系統軟件,是嵌入式系統極為重要的組成部分,通常包括與硬件相關的底層驅動程序、系統內核、設備驅動接口、通信協議、圖形用戶界面(GUI)等。嵌入式操作系統具有通用操作系統的基本特點,如能夠有效管理復雜的系統資源,能夠對硬件進行抽象,能夠提供庫函數、驅動程序、開發工具集等。但與通用操作系統相比較,嵌入式操作系統在系統實時性、硬件依賴性、軟件固化性以及應用專用性等方面,具有更加鮮明的特點。

嵌入式操作系統根據應用場合可以分為兩大類:一類是面向消費電子產品的非實時系統,這類設備包括個人數字助理(PDA)、移動電話、機頂盒(STB)等;另一類則是面向控制、通信、醫療等領域的實時操作系統,如WindRiver公司的VxWorks、QNX系統軟件公司的QNX等。實時系統(Real Time System)是一種能夠在指定或者確定時間內完成系統功能,并且對外部和內部事件在同步或者異步時間內能做出及時響應的系統。在實時系統中,操作的正確性不僅依賴于邏輯設計的正確程度,而且與這些操作進行的時間有關,也就是說,實時系統對邏輯和時序的要求非常嚴格,如果邏輯和時序控制出現偏差將會產生嚴重后果。

實時系統主要通過三個性能指標來衡量系統的實時性,即響應時間(Response Time)、生存時間(Survival Time)和吞吐量(Throughput):

響應時間  是實時系統從識別出一個外部事件到做出響應的時間;
生存時間 是數據的有效等待時間,數據只有在這段時間內才是有效的;
吞吐量   是在給定的時間內系統能夠處理的事件總數,吞吐量通常比平均響應時間的倒數要小一點。
實時系統根據響應時間可以分為弱實時系統、一般實時系統和強實時系統三種。弱實時系統在設計時的宗旨是使各個任務運行得越快越好,但沒有嚴格限定某一任務必須在多長時間內完成,弱實時系統更多關注的是程序運行結果的正確與否,以及系統安全性能等其他方面,對任務執行時間的要求相對來講較為寬松,一般響應時間可以是數十秒或者更長。一般實時系統是弱實時系統和強實時系統的一種折衷,它的響應時間可以在秒的數量級上,廣泛應用于消費電子設備中。強實時系統則要求各個任務不僅要保證執行過程和結果的正確性,同時還要保證在限定的時間內完成任務,響應時間通常要求在毫秒甚至微秒的數量級上,這對涉及到醫療、安全、軍事的軟硬件系統來說是至關重要的。

時限(deadline)是實時系統中的一個重要概念,指的是對任務截止時間的要求,根據時限對系統性能的影響程度,實時系統又可以分為軟實時系統(soft real-time-system)和硬實時系統(hard real-time-system)。軟實時指的是雖然對系統響應時間有所限定,但如果系統響應時間不能滿足要求,并不會導致系統產生致命的錯誤或者崩潰;硬實時則指的是對系統響應時間有嚴格的限定,如果系統響應時間不能滿足要求,就會引起系統產生致命的錯誤或者崩潰。如果一個任務在時限到達之時尚未完成,對軟實時系統來說還是可以容忍的,最多只會降低系統性能,但對硬實時系統來說則是無法接受的,因為這樣帶來的后果根本無法預測,甚至可能是災難性的。在目前實際運用的實時系統中,通常允許軟硬兩種實時性同時存在,其中一些事件沒有時限要求,另外一些事件的時限要求是軟實時的,而對系統產生關鍵影響的那些事件的時限要求則是硬實時的。

嵌入式應用軟件

嵌入式應用軟件是針對特定應用領域,基于某一固定的硬件平臺,用來達到用戶預期目標的計算機軟件,由于用戶任務可能有時間和精度上的要求,因此有些嵌入式應用軟件需要特定嵌入式操作系統的支持。嵌入式應用軟件和普通應用軟件有一定的區別,它不僅要求其準確性、安全性和穩定性等方面能夠滿足實際應用的需要,而且還要盡可能地進行優化,以減少對系統資源的消耗,降低硬件成本

四、如何構建嵌入式Linux系統的設計步驟
?嵌入式系統目前主要有:Windows CE、VxWorks、QNX等,它們都具較好的實時性,系統可靠性,任務處理隨機性等優點。但是它們的價格普遍偏高,很多開發商承受不起。因而,Linux操作系統成為嵌入式操作系統的首選。以下小編來整理了一些關于如何構建嵌入式Linux系統的資料,方便大家對構建嵌入式Linux系統有一定的認識,希望能給大家有所幫助。
Linux操作系統成為嵌入式操作系統首選的原因

  在精簡內核在編譯內核之前,首先要明確需要那些驅動和模塊,然后只選擇需要的驅動和模塊,例如,如果系統不需要網絡支持,則可以去掉網絡模塊 。內核一般是以壓縮方式存放的,在系統啟動時會自行解壓。內核都是常駐內存的,當需要調用應用程序時,再把需要的程序從磁盤調入內存運行。

構建嵌入式Linux系統-構建內核常用的命令包括:
  ◆ make config:內核配置,調用 ./scripts/Configure 按照 arch/i386/config.in 來進行配置。
  ◆ make dep:尋找依賴關系。
  ◆ make clean:清除以前構建內核所產生的所有目標文件、模塊文件、以及一些臨時文件等。
  ◆ make rmproper:刪除所有因構建內核過程中產生的所有文件,把內核恢復到最原始的狀態。
  ◆ make:構核,通過各目錄的Makefile 文件將會在各個目錄下產生許多目標文件。如果內核沒有錯誤,將產生文件vmlinux,這就是構建的內核。
  ◆ make zImage:在make 的基礎上產生壓縮的內核映象文件./arch/$(ARCH)/boot/zImage 以及在 ./arch/$(ARCH)/boot/compresed/目錄下產生臨時文件。
  ◆ make bzImage:在make 的基礎上產生壓縮比例更大的內核映象文件./arch/$(ARCH)/boot/bzImage 以及在 ./arch/$(ARCH)/boot/compresed/目錄下產生臨時文件。
  ◆ make modules:編譯模塊文件,在make config 時所配置的所有模塊將在這時編譯,形成模塊目標文件,并把這些目標文件存放在modules 目錄中。
  ◆ make modules_install:把上面編譯好的模塊目標文件放置在目錄 ./lib/modules/$KERNEL_VERSION/ 中。上面的編譯內核是在沒有改變源代碼的情況下實現的,如果覺得源代碼提供的功能在某些方面不能滿足要求,就要修改源代碼了。源代碼中主要有以下幾個關鍵部分:有關進程管理的task_struct 結構,這個結構幾乎包括了與進程有關的所有文件內容,還有任務隊列、時鐘管理和中斷管理,各種進程間的通信機制,內存管理中各種內存分配函數的實現,虛擬文件系統。
  下面來論述了以Linux作為操作系統平臺的優勢,分析了以PC104卡和CompactFlash卡構造帶圖形用戶界面(GUI)的Linux系統的關鍵技術. (構建嵌入式Linux系統)
1) 硬件及軟件環境

  Linux系統的硬件環境以PC104卡為核心,卡上集成美國國家半導體公司(NS Geode)GX1 300MHz CPU,SVGA/LCD/LAN接口以及增強型IDE硬盤接口,支持CompactFlash卡。硬盤和光驅接至PC104的IDE1口,設置跳線使硬盤為主設備(master),光驅為從設備(slave),CompactFlash裝在IDE2口,設為主設備,這樣Linux識別 CompactFlah卡為/dev/hdc,而硬盤和光驅分別為/dev/had,/dev/hdb.我的Linux開發系統是Red Hat 7.2版,通過PC104上的光驅安裝在硬盤上。

  CompactFlash卡容量為32M,如果系統的BIOS支持自動檢測,應該可以直接探測到它。如果不行的話,需要自己輸入卡的各項參數。確保不要帶電插拔CompactFlash卡,因為這可能導致卡上數據的丟失。由于像Red Hat或Mandrake這樣的Linux分發版體積龐大(如果帶X-Windows基本都在1G以上),是不可能裝在容量只有32M的CompactFlash卡上的。目前有許多小型的嵌入式Linux版本,比較有名的有:
  ETLinux — 設計用于在小型工業計算機,尤其是 PC/104 模塊上運行的 Linux 的完全分發版。
  LEM — 運行在 386 上的小型(<8 MB)多用戶、網絡 Linux 版本。
  LOAF — "Linux On A Floppy"分發版,運行在 386 上。
  uClinux — 在沒有 MMU 的系統上運行的 Linux。目前支持 Motorola 68K、MCF5206 和 MCF5207 ColdFire 微處理器。

  出于深入了解Linux系統運行環境和機制的想法,建議自己構建Linux系統,這對于將來系統內核版本的升級和應用功能的拓展很有好處。選擇Red Hat 7.2的Linux版本。

2) 系統分區和格式化

  首先,需要在CompactFlash卡上建立分區和格式化,在Linux下用fdisk命令可以在CompactFlash卡上創建分區,命令格式為fdisk /dev/hdc,然后用mke2fs命令創建ext2文件系統.

系統分區和格式化 

3)構建嵌入式Linux系統-編譯內核

  接下來要做的事情是編譯一個自己的內核。內核負責管理系統的進程、內存、設備驅動程序、文件和網絡系統,決定著系統的性能和穩定性。從技術上而言, Linux 是一個內核,而且只是一個內核。其余我們通常稱之為 "Linux" (例如一個 shell 和編譯器)的部分實質上只是整個軟件包的一部分,它們從技術上而言是與 Linux (內核)分開的。選擇與開發系統一樣的內核版本2.4.7,在Linux內核版本發布的官方網站上可以找到內核源代碼。在編譯內核的時候,由于內核是在特定的機器上使用的,所以應該對機器的情況了如指掌。

  另一方面,為了降低過高的復雜性,可以不用kernel module支持,把所有需要的東西直接編譯到內核里。IDE支持是必不可少的,因為Linux認CompactFlash卡為IDE硬盤,Frame buffer的支持也是必要的,這來源于GUI系統—MiniGUI的要求,網絡支持可以不要,但是如果認為顯示屏將來有這方面的要求也可以把它加上。

4) 構建嵌入式Linux系統-創建根文件系統(Root Filesystem)

  在編譯好內核后,需要在CompactFlash卡上創建根文件系統。每臺機器都有根文件系統(一般在本地盤中,當然也可以在RAM盤或網絡盤中),它包含系統引導和使其他文件系統得以mount所必要的文件,根文件系統應該有單用戶狀態所必須的足夠的內容。還應該包括修復損壞系統、恢復備份等的工具。

  如果有一個任務比其它任務更能簡化從頭構建 Linux 根文件系統過程的話,那就是構建和安裝 BusyBox 軟件包。BusyBox 是一個可執行文件,它提供許多其它常用命令行工具的功能,所有這些功能都合為一體。BusyBox 的文檔聲稱構建一個有效系統所需要的全部就是 BusyBox 和"/dev、/etc 以及內核"— 而且他們沒有開玩笑。

  Busybox 編譯出一個單個的獨立執行程序,就叫做 busybox。但是它可以根據配置,執行 ash shell 的功能,以及幾十個各種小應用程序的功能。這其中包括有一個迷你的 vi 編輯器,系統不可或缺的 /sbin/init 程序,以及其他諸如 sed, ifconfig, halt, reboot, mkdir, mount, ln, ls, echo, cat ... 等等這些都是一個正常的系統上必不可少的。但是如果我們把這些程序的原件拿過來的話,它們的體積加在一起,讓人吃不消。可是 busybox 有全部的這么多功能,大小也不過 100K 左右。而且,用戶還可以根據自己的需要,決定到底要在 busybox 中編譯進哪幾個應用程序的功能。這樣的話,busybox 的體積就可以進一步縮小了。Busybox的具體編譯和配置方法請參閱Busybox的官方文檔,用戶可以在上找到.

  系統啟動后內核調用的第一個進程是/sbin/init。init進程是系統所有進程的起點,內核在完成核內引導以后,即在本線程(進程)空間內加載 init程序,它的進程號是1。init程序需要讀取/etc/inittab文件作為其行為指針,inittab是以行為單位的描述性(非執行性)文本,inittab文件至少應該包含下面幾行:
  ::sysinit:/etc/init.d/rcS //運行系統公共腳本
  ::respawn:/bin/sh //立即進入shell環境
  ::ctrlaltdel:/bin/umount -a //捕捉Ctrl+Alt+Del快捷鍵,退出系統
由于init進程第一個執行的腳本文件是/etc/init.d/rcS,編輯rcS文件:
  #! /bin/sh
  mount -a


接著還需要編寫/etc/fstab文件:
  proc /proc proc defaults 0 0
  none /var/shm shm defaults 0 0

5) 安裝系統引導工具(boot loader)

  現在CompactFlask卡上新的內核已經有了,文件系統也已經建好了,接著要做的事情是安裝系統引導工具(boot loader)。目前可以選用的引導工具很多,象LILO或GRUB都是挺不錯的,用戶可以按自己的喜好來選擇。在這里我們選用LILO,它在硬盤開始的 MBR寫入引導代碼,這些代碼不經過文件系統,直接從硬盤扇區號讀內核映象(kernel image)裝入內存。那么要如何安裝LILO呢?首先需要根據用戶系統的搭建情況編輯/etc/lilo.conf文件,下面是我的 /etc/lilo.conf文件,配有注釋,你可以根據自己的情況進行更改,具體你可以參考LILO mini-HOWTO:

  boot=/dev/hdc #從CompactFlash卡啟動
  disk=/dev/hdc
  bios=0x80 #使BIOS認CompactFlash卡為啟動盤
  delay=0 #可選,以秒為單位
  vga=0x311 #可選,參照Frame buffer的配置
  image=/boot/vmlinuz-2.4.7 #內核文件位置

?

==========================================================

五、

構建嵌入式linux開發環境和應用程序的編寫

(2009-09-09 12:37:09)
轉載
標簽:

linux

雜談

分類: linux學習

構建嵌入式linux開發環境和應用程序的編寫

實驗步驟:(注意://號后的的內容為注釋)
一、構建嵌入式Linux開發環境
1、linux下網絡的設置

(1)啟動linux后,選擇系統管理網絡。(2)選擇設備進行IP地址的設置

(3)選擇DNS,進行DNS的設置??? (4)最后,激活網絡設備

2、minicom的設置
(1)啟動linux后,選擇應用程序附件終端,單擊右鍵,選擇將該啟動器添
加到桌面,單擊左鍵,此時,會在桌面上會出現一個終端的快捷鍵。

(2)雙擊桌面上的終端,打開一個終端。(可同時打開多個終端)在命令提示符
下,輸入:
#minicom–s
??? 回車,進行minicom的設置:serila device :/dev/ttyS0

???????????????????????? lockfile location :/var/lock

???????????????????????? bps/par/bits :115200 8N1

???????????????????????? Hardware flow control :no

???????????????????????? Software Flow control :no

??? 回車,選擇save setup as df1

(3)退出設置界面,可以看到minicom啟動的畫面

(4)連接好開發板與PC機的串口線,啟動開發板,看到有1.2.3.4等等各種選項的話,說明minicom已經設置好了。
3、安裝交叉編譯器(在PC機終端進行)
軟件包:cross_2.95.3.tar.bz2
(1)在/usr/local下建一個名為arm的目錄。
#mkdir/usr/local/arm
(2)將cross-2.95.tar.bz2復制到剛剛新建的目錄中。
(3)#cd/usr/local/arm//到/usr/local/arm目錄下
(4)解壓縮該軟件包
#tar-xjvf cross-2.95.tar.bz2
(5)解壓后在cross-2.95.tar.bz2的同一目錄下出現一個2.95.3的目錄,將此
目錄下的/bin目錄添加到環境變量中去

#export PATH=/usr/local/arm/2.95.3/bin:$PATH
(6)用此方法添加的環境變量在掉點后會丟失,因此,可以使用在“/etc/bashrc”
的最后一行添加以上命令。
#vi/etc/bashrc?

?然后在最后一行加上export PATH=/usr/local/arm/2.95.3/bin:$PATH

? (7)查看該路徑是否已添加到環境變量中。
#echo$PATH
usr/local/arm/2.95.3/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin

4、安裝編繹ARM Linux內核(在PC機終端進行

軟件包:kernel2410.tgz

(1)在/下建一個名為s3c2410的目錄。

#mkdir s3c2410//建立s3c2410文件夾

(2)將kernel2410.tgz復制到剛剛新建的目錄中

#cd/s3c2410/??????????? //到s3c2410目錄下

#tar?? zxvf?? kernel2410.tgz?????? //解壓kernel2410.tgz

(3)編譯內核。

#cd/s3c2410/2.4.18-rmk7???? //到2.4.18-rmk7目錄下

#make menuconfig???????? //執行make menuconfig命令,進行內核配置.

(4)進入主界面后,裝載默認配置文件kernel_2410.cfg

(當然,我們可根據自身需要定制內核,具體請參考內核配置.txt。)

選擇:Load an Alternate Configuration File? 回車

然后填寫為:kernel_2410.cfg?? 選擇 ok

?回車退出。

(5)設置完成后,建立依賴關系,編譯內核

#make dep?????? //建立依賴關系

#make zImage???? //編譯內核

(6)編繹結束后,在arch/arm/boot目錄下生成了linux內核的壓縮映像zImage

?5、下載內核映像到開發板:

//在PC機終端進行
(1)使用tftpcmd網絡傳輸,設置PC機IP地址,將其地址與開發平臺的IP地址設置在同一網段內。這里,將PC的IP設為192.168.3.111。并把tftpcmd復制到/bin(PC機的/bin目錄)文件夾下。
(2)#cd/s3c2410/2.4.18-rmk7/arch/arm/boot????? //到boot目錄下

//在minicom終端進行
(3)將開發板與PC機用交叉網線連接好,設置好minicom,復位開發板,按住A鍵,進入BIOS命令行狀態提示符,輸入命令netload,回車。

//在PC機終端進行:
(4)打開一個終端,在/s3c2410/2.4.18-rmk7/arch/arm/boot下新建一個down文件
#vi down
在down文件里輸入如下內容:
tftpcmd?? 192.168.3.100? 69? put zImage?
(ip 是arm開發板BIOS中的ip地址;zImage則是要下載的文件名)
(5)雙擊down批處理文件,選擇在終端運行,或是輸入如圖所示命令,可以
看到內核映像下載到了開發板。(注意:down文件要和zImage文件在同一個目
錄下)
#./down
(6)傳輸完后,在minicom終端輸入命令“nfprog”,然后回車,然后輸入“1”
選擇第二個區塊,輸入“Y”確認將文件燒寫到nandflash中。
至此,內核配置,下載,燒寫完全了。

二、應用程序編寫
1、Hello,World!
Step1:編輯源代碼
//在PC機終端進行
在PC機的Linux下用vi編輯器以下源代碼,并保存為helloworld.c
#cd/s3c2410???? //到s3c2410目錄下
#vi helloworld.c????? //編輯helloworld.c程序
源程序如下:
#include<stdio.h>
int main(void)
{
printf("hello,world!\n");
return 0;
}
Step2:編譯helloworld
使用以下命令編譯:arm-linux-gcc –o helloworld? helloworld.c
(arm-linux-gcc:編譯命令)
(helloworld : 編譯生成的可執行文件的文件名)
(helloworld.c :被編譯文件的文件名)
將生成helloworld可執行文件。
Step3:下載并運行

將可執行文件移動到FS2410P目前主要有三兩種方式
(1)通過網絡移動
通過網絡下載程序的主要步驟是:先把helloworld復制到ftp共享目錄,
然后在FS2410P上使用ftp下載。(請查閱相關資料自行完成)
(2)通過NFS進入映射(可參考文檔nfsonARMSYS.pdf)
//在PC機終端進行
編輯PC機端NFS的相關文件---設置NFS共享目錄
#vi/etc/exports????? //修改PC端/exports文件,在文件中輸入以下內容
/s3c2410?? 192.168.*.*(rw)
(/s3c2410 :?? pc 機端欲共享給arm開發板的目錄)
(192.168.*.*(rw):?? 可以用來訪問pc機端共享目錄的網段)
?#exportfs-rv????? //通知系統共享目錄改變了,每次修改目錄后,要運行此命令來告訴系統此變化
#/etc/rc.d/init.d/nfs start???? //啟動PC機的NFS服務
啟動NFS服務:?? [確定]
關掉NFS配額:?? [確定]
啟動NFS守護進程:?? [確定]
啟動NFS mountd:?? [確定]
關閉防火墻,選擇系統--管理--安全級別及防火墻,將其防火墻設為禁用。
去掉iptables服務,選擇系統--管理--services在彈出的界面中,將iptables、ip6tables前面的“√”去掉。

//在minicom終端進行
在minicom中,啟動linux后,在命令提示符下:
#mount? 192.168.3.111:/s3c2410?? /tmp
??? (192.168.3.111 :為PC機端的IP)
( /s3c2410: PC機端共享給arm板的目錄)
( /tmp :ARM板的掛載目錄)
#cd/tmp???????? //到ARM開發板的掛載目錄下
#./hellworld???????????? //執行該目錄下的helloworld可執行文件。

注意:如果NFS mount不成,
★是否在修改PC機IP之后重新激活網絡
★檢查PC機和ARM開發板linux系統中的IP是否在同一個段內:
ARM開發板IP查看命令:ifconfig eth0
ARM開發板IP更改命令:ifconfig eth0***.***.***.*
?? (***.***.***.*為輸入要設的IP地址,每次ARM開發板linux系統重啟后要重新設置.或修改根文件系統/usr/etc/rc.local文件中的IP,重新制作根文件系統,燒寫到開發板,這樣就可以把改變的IP保存到FLASH,根文件系統的制作和燒寫辦法參考后面)
★可在PC端自已mount一下自已的目錄,看是否成功,如果成功,說明NFS配置
正確.
//在PC機終端進行
#mount?? 192.168.3.111:/s3c2410???? /tmp
? (192.168.3.111 為PC機端的IP.)
( /s3c2410 為PC機端共享給ARM板的目錄.)
( /tmp 為PC機想要掛載的目錄.)
★如果按上述方法配置還mount不成的話,可刪去PC端的DNS地址和網關地址
重新激活網絡,并重新啟動NFS服務:
#/etc/rc.d/init.d/nfs?? restart

?

(3)將應用程序添加到cramfs根文件系統中及根文件系統的制作:
(可參考FS2410P實驗指導手冊v2.1.2.pdf 314頁)

//在PC機終端進行
(1)將FS2410XP_camare_demo.cramfs拷貝到/s3c2410目錄下。
(2)在該目錄下建立兩個文件:
#cd/s3c2410/?????? //到s3c2410目錄下
#mkdir chang?????? //新建目錄
#mkdir guo??????? / /新建guo目錄
(3)將FS2410XP_camare_demo.cramfs掛接到chang目錄。
#mount? –o? loop? FS2410XP_camare_demo.cramfs?? chang
//掛載FS2410XP_camare_demo.cramfs到chang目錄下
(4)將chang目錄下的內容壓縮。
#cd chang???? / /到chang目錄下
#tar?? - cvf?? /s3c2410/1.tar??? ./???????? //壓縮當前目錄為1.tar
(? /s3c2410/1.tar 為生成壓縮包的目錄,包名為1.tar)
(? ./ 為被壓縮的目錄,在這是指當前目錄)
這時,將在chang的目錄產生一個1.tar的包。
#cd..?????? //回到上一層目錄
#mv 1.tar guo????? //移動到1.tar到guo目錄下
#cd guo?????? //到guo目錄下
#tar-xvf 1.tar??????? //解壓1.tar
#rm 1.tar?????? //刪除1.tar
rm:是否刪除一般文件“1.tar”?? y
(5)復制helloworld可執行文件到/s3c2410/guo/bin目錄下。
(6)現在開始制作cramfs根文件系統
./mkcramfs?? /s3c2410/guo??? FS2410XP_camare_demo.cramfs
( ./mkcramfs? :為制作根文件系統的工具,要把mkcramfs這個命令拷貝到當前目錄.
( /s3c2410/guo? :為被制作的目錄)
( FS2410XP_camare_demo.cramfs? :為制作后生成文件的文件名)
在/s3c2410/guo目錄下,生成了新的根文件系統FS2410XP_camare_demo.cramfs,
根文件系統的下載,燒寫方法同內核映象一樣
將新的根文件系統下載,燒寫進nandflash,復位開發板,啟動linux,在命令提示符下輸入:
?
//在minicom終端進行
#./helloworld??????? //執行helloworld程序

Hello,world!??? //執行結果

?

?

?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/254163.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/254163.shtml
英文地址,請注明出處:http://en.pswp.cn/news/254163.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

win10系統javac不是內部或外部命令,也不是可運行的程序 或批處理文件。

按照下面的步驟設置環境變量 說明&#xff1a; 1. 如果編輯的是系統環境變量&#xff0c;命令提示符需要以管理員權限運行&#xff1b;如果在用戶環境變量中編輯&#xff0c;則當前用可直接運行命令提示符。 2. win10中的路徑相對于win7要設置成絕對路徑。 1&#xff0e;打開…

兩個bat文件

1、修改后綴名 ren *.cs *.txt ren *.txt *.zip2、修改文件名稱 echo offset a00setlocal EnableDelayedExpansionfor %%n in (*.txt) do (set /A a1ren "%%n" "!a!.txt")

各種排序筆記---基于比較排序部分

1. 選擇排序 selection sort 大循環 從左到右每次以一個點開始掃描array 小循環 找到從當前起始點開始的最小值 時間復雜度為O(N^2) //selection sort an array array[] public class Solution {public int[] solve(int[] array) {if (array null || array.length 0) {return…

是什么讓深度學習再次崛起并超越人類?

作者潘爭&#xff0c;格靈深瞳計算機視覺工程師&#xff0c;清華大學自動化系博士&#xff0c;師從智能技術與系統國家重點實驗室副主任張長水。深度學習(Deep Learning)這個詞最近借著AlphaGO與李世石的人機大戰又火了一把。深度學習其實是機器學習(Machine Learning)的一個分…

常見的流量問題

常見的流量問題 冗余內容同類請求被間隔執行&#xff0c;請求的內容包含一些相對靜態的信息&#xff0c;正確的處理是第一次請求包括靜態信息就好&#xff0c;后面的同類請求只包含必要的即時變化信息即可。錯誤的處理方式是每次請求服務器都返回一次靜態信息。 冗余請求有的時…

halcon使用點擬合圓形時候,點集順序紊亂,不影響圓形擬合效果

read_image (Image, 截圖20201226094342972.bmp) * Matching 01: BEGIN of generated code for model initialization set_system (border_shape_models, false) * Matching 01: Obtain the model image * Matching 01: The image is assumed to be made available in the * Ma…

Socket理解。

其他大部分系統&#xff0c;例如CRM/CMS/權限框架/MIS之類的&#xff0c;無論怎么復雜&#xff0c;基本上都能夠本地代碼本地調試&#xff0c;性能也不太重要。&#xff08;也許這個就是.net的企業級開發的戰略吧&#xff09; 可是來到通訊系統&#xff0c;一切變得困難復雜。原…

多元化時代敏捷軟件開發的崛起與傳統軟件工程的延續

多元化時代敏捷軟件開發的崛起與傳統軟件工程的延續 1.傳統軟件開發模式 1.1瀑布模型 1.1.1概念 瀑布模型&#xff0c;顧名思義&#xff0c;軟件開發的過程如同瀑布飛流一般&#xff0c;自上而下&#xff0c;逐級下落。瀑布模型的核心思想是將問題按照工序進行簡化&#xff0c;…

Linux中的cron計劃任務配置詳解

cron來源于希臘單詞chronos&#xff08;意為“時間”&#xff09;&#xff0c;指Linux系統下一個自動執行指定任務的程序&#xff08;計劃任務&#xff09; ####1. crontab命令選項代碼如下: #crontab -u <-l, -r, -e> -u指定一個用戶 -l列出某個用戶的任務計劃 -r刪除某…

new和delete

和 sizeof 類似&#xff0c;sizeof不是函數&#xff0c;它是一個操作符&#xff0c;它在編譯期就完成了計算&#xff0c;在函數運行期間它已經是一個常數值了。 int a;sizeof(int) 4;sizeof(a) 4;sizeof a ——也是4 不需要括號&#xff01;此時要注意&#xff1a;sizeof in…

char a[]和char *a的比較,數組名,數組首地址,a,a,a[0]

char a[]和char *a的比較 指針和數組存在著一些本質的區別。當然&#xff0c;在某種情況下&#xff0c;比如數組作為函數的參數進行傳遞時&#xff0c;由于該數組自動退化為同類型的指針&#xff0c;所以在函數內部&#xff0c;作為函數參數傳遞進來的指針與數組確實具有一定的…

Java中繼承thread類與實現Runnable接口的區別

Java中線程的創建有兩種方式&#xff1a; 1&#xff0e; 通過繼承Thread類&#xff0c;重寫Thread的run()方法&#xff0c;將線程運行的邏輯放在其中 2&#xff0e; 通過實現Runnable接口&#xff0c;實例化Thread類 在實際應用中&#xff0c;我們經常用到多線程&#xff0c;…

【VMware vSAN 6.6】6.2.啟用性能服務:vSAN硬件服務器解決方案

目錄 1. 簡介 1.1.適用于HCI的企業級存儲2. 體系結構 2.1.帶有本地存儲的服務器2.2.存儲控制器虛擬系統套裝的缺點2.3.vSAN在vSphere Hypervisor中自帶2.4.集群類型2.5.硬件部署選項3. 啟用vSAN 3.1.啟用vSAN3.2.輕松安裝3.3.主動測試4. 可用性 4.1.對象和組件安置4.2.重新構建…

Android eclipse導入項目后出現Unable to resolve target #39;android-17#39;解決方法

eclipse導入項目后出現Unable to resolve target android-17解決方法。在最后附帶還有一種編譯邏輯不成功情況解決方法。 一、問題情況 二、解決的方法 1、改動項目的目標版本號與當前Android sdk相相應的版本號 2、自己主動修復一下項目 三、這個問題不是上面的。是另外情況&a…

多個圓點,鼠標選取兩個,求兩個點的距離,用于計算像素尺寸(halcon實現)

read_image (Image, C:/Users/22967/Desktop/晶圓找位置/0.bmp) dev_close_window () dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle) dev_display (Image)binary_threshold (Image, Region1, max_separability, dark, UsedThreshold) connection (Region1, C…

修改UBOOT和LINUX調試串口(TI達芬奇芯片--DM6467)

Posted on 2011-10-31 10:53 jamiedu 閱讀(889) 評論(0) 編輯 收藏 1.1 概述 TI針對DM6467提供的UBOOT和內核默認都是串口0作為調試串口輸出的&#xff0c;但現在我需要使用DM6467的UART0的modem功能&#xff0c;所以修改代碼&#xff0c;改變調試串口為串口2。 需要修改的主要…

Java List與數組之間的轉換

http://blog.csdn.net/kingzone_2008/article/details/8444678轉載于:https://www.cnblogs.com/longshiyVip/p/5985981.html

受歡迎的五個開源可視化工具——你的選擇是?

摘要&#xff1a;大數據時代&#xff0c;數據為王&#xff0c;還在對一堆數據而發愁嗎&#xff1f;試試可視化工具吧&#xff0c;相信本文提到的五款工具有一款能夠幫助到你。人工智能時代&#xff0c;數據和算法以及硬件資源是非常重要的&#xff0c;相關行業的大公司也越來越…

halcon車刀崩邊檢測

list_files (新建文件夾, files, Files) read_image (Image, Files[0]) dev_close_window () get_image_size (Image, Width, Height) dev_open_window (0, 0, Width/1.5, Height/1.5, black, WindowHandle) dev_set_draw (margin) dev_set_colored (12) for Index:0 to |Files…

FFMPEG解碼264文件步驟

本文以H264視頻流為例&#xff0c;講解解碼流數據的步驟。 為突出重點&#xff0c;本文只專注于討論解碼視頻流數據&#xff0c;不涉及其它&#xff08;如開發環境的配置等&#xff09;。如果您需要這方面的信息&#xff0c;請和我聯系。 準備變量 定義AVCodecContext。如果…