Arm學習

怎麼學ARM

如果你想學好ARM就得先熟悉整一個linux系統的操作以及架構 
待你熟悉之後必須學好C語言還有ui編程(個人推薦QT)
一切具備之後,你就開始學習ARM的開發板(新手從mini2440或者三星2440)
初學的要懂 交叉編譯連 uboot 等 
然後往深層次的是驅動編程
書籍有很多如果推薦的話 ARM架構 驅動編程  unix環境高級編程 等書籍都要看!!!!而且要吃透 

查看Linux系統架構類型的5條常用命令

1. uname 命令


uname -a 命令可以直接顯示 Linux 系統架構的命令,安幾乎可以工作在所有 Linux/Unix 系統當中。

–kernel-name內核名稱

nodeName 屬性

 根據節點的類型返回其名稱 

    -a或--all:顯示全部的信息; 
    -m或--machine:顯示電腦類型;
    -n或-nodename:顯示在網絡上的主機名稱;
        -r或--release:顯示操作系統的發行編號;
        -s或--sysname:顯示操作系統名稱;
        -v:顯示操作系統的版本;
        -p或--processor:輸出處理器類型或"unknown"        -i或--hardware-platform:
        輸出硬件平臺或"unknown"; 
        -o或--operating-system:輸出操作系統名稱; 
        --help:顯示幫助;
        --version:顯示版本信息。

linux內核版本的分類

  #41~16.04.1-Ubuntu SMP Fri Oct 6 22:42:59 UTC 2017

命令: uname -v

Linux內核版本有兩種:穩定版和開發版 ,Linux內核版本號由3組數字組成:第一個組數字.第二組數字.第三組數字

第一個組數字:目前發佈的內核主版本。

第二個組數字:偶數表示穩定版本;奇數表示開發中版本。

第三個組數字:錯誤修補的次數。

dpkg

dpkg 的命令可用於查看 Debian/ Ubuntu 操作系統是 32 位還是 64 位,此命令只適用於基於 Debian  Ubuntu  Linux 發行版。

在終端中執行如下命令:
dpkg --print-architecture
如果當前 Linux 是 64 位則輸出 amd64,是 32 位則會輸出 i386。

getconf LONG_BIT

getconf 命令主要用於顯示系統變量配置,我們也可使用如下參數來查看 Linux 系統架構:

getconf LONG_BIT

4. arch 命令

arch 命令主要用於顯示操作系統架構類型,與 uname -m 命令非常類似。如果輸出 x86_64 則表示爲 64 位系統,如果輸出 i686 或 i386 則表示爲 32 位系統。

5.file

File 命令可以配合 /sbin/init 這個特殊參數來查看系統架構類型(/sbin/init 在 Ubuntu 15.10 裏面是鏈接到/lib/systemd/systemd 的):

file /sbin/init

Linux系統構架

內核、shell、文件系統和應用程序。內核、shell和文件系統一起形成了基本的操作系統結構,它們使得用戶可以運行程序、管理文件並使用系統。

linux系統構架

```
 內核是操作系統的核心,具有很多最基本功能,它負責管理系統的進程、內存、設備驅動程序、文件和網絡系統,決定着系統的性能和穩定性。
   Linux 內核由如下幾部分組成:內存管理、進程管理、設備驅動程序、文件系統和網絡管理(TCP/IP)等。
  ```

這裏寫圖片描述

系統調用接口:SCI 層提供了某些機制執行從用戶空間到內核的函數調用。這個接口依賴於體系結構,甚至在相同的處理器家族內也是如此。SCI 實際上是一個非常有用的函數調用多路複用和多路分解服務。在 ./linux/kernel 中您可以找到 SCI 的實現,並在 ./linux/arch 中找到依賴於體系結構的部分。
  1. 內存管理

    對任何一臺計算機而言,其內存以及其它資源都是有限的。爲了讓有限的物理內存滿足應用程序對內存的大需求量,Linux  採用了稱爲“虛擬內存”的內存管理方式。Linux  將內存劃分爲容易處理的“內存頁”(對於大部分體系結構來說都是 4KB)。Linux 包括了管理可用內存的方式,以及物理和虛擬映射所使用的硬件機制。
    

      不過內存管理要管理的可不止 4KB 緩衝區。Linux 提供了對 4KB 緩衝區的抽象,例如 slab 分配器。這種內存管理模式使用 4KB 緩衝區爲基數,然後從中分配結構,並跟蹤內存頁使用情況,比如哪些內存頁是滿的,哪些頁面沒有完全使用,哪些頁面爲空。這樣就允許該模式根據系統需要來動態調整內存使用。
       爲了支持多個用戶使用內存,有時會出現可用內存被消耗光的情況。由於這個原因,頁面可以移出內存並放入磁盤中。這個過程稱爲交換,因爲頁面會被從內存交換到硬盤上。內存管理的源代碼可以在 ./linux/mm 中找到。

2 .進程管理
進程實際是某特定應用程序的一個運行實體。在 Linux 系統中,能夠同時運行多個進程,Linux 通過在短的時間間隔內輪流運行這些進程而實現“多任務”。這一短的時間間隔稱爲“時間片”,讓進程輪流運行的方法稱爲“進程調度” ,完成調度的程序稱爲調度程序。

   進程調度控制進程對CPU的訪問。當需要選擇下一個進程運行時,由調度程序選擇最值得運行的進程。可運行進程實際上是僅等待CPU資源的進程,如果某個進程在等待其它資源,則該進程是不可運行進程。Linux使用了比較簡單的基於優先級的進程調度算法選擇新的進程。 

    通過多任務機制,每個進程可認爲只有自己獨佔計算機,從而簡化程序的編寫。每個進程有自己單獨的地址空間,並且只能由這一進程訪問,這樣,操作系統避免了進程之間的互相干擾以及“壞”程序對系統可能造成的危害。 爲了完成某特定任務,有時需要綜合兩個程序的功能,例如一個程序輸出文本,而另一個程序對文本進行排序。爲此,操作系統還提供進程間的通訊機制來幫助完成這樣的任務。Linux 中常見的進程間通訊機制有信號、管道、共享內存、信號量和套接字等。 

   內核通過 SCI 提供了一個應用程序編程接口(API)來創建一個新進程(fork、exec 或 Portable Operating System Interface [POSⅨ] 函數),停止進程(kill、exit),並在它們之間進行通信和同步(signal 或者 POSⅨ 機制)。
  1. 文件系統
    和 DOS 等操作系統不同,Linux 操作系統中單獨的文件系統並不是由驅動器號或驅動器名稱(如 A: 或 C: 等)來標識的。相反,和 UNIX 操作系統一樣,Linux 操作系統將獨立的文件系統組合成了一個層次化的樹形結構,並且由一個單獨的實體代表這一文件系統。Linux 將新的文件系統通過一個稱爲“掛裝”或“掛上”的操作將其掛裝到某個目錄上,從而讓不同的文件系統結合成爲一個整體。Linux 操作系統的一個重要特點是它支持許多不同類型的文件系統。Linux 中最普遍使用的文件系統是 Ext2,它也是 Linux 土生土長的文件系統。但 Linux 也能夠支持 FAT、VFAT、FAT32、MINIX 等不同類型的文件系統,從而可以方便地和其它操作系統交換數據。由於 Linux 支持許多不同的文件系統,並且將它們組織成了一個統一的虛擬文件系統.

    虛擬文件系統(VirtualFileSystem,VFS):隱藏了各種硬件的具體細節,把文件系統操作和不同文件系統的具體實現細節分離了開來,爲所有的設備提供了統一的接口,VFS提供了多達數十種不同的文件系統。虛擬文件系統可以分爲邏輯文件系統和設備驅動程序。邏輯文件系統指Linux所支持的文件系統,如ext2,fat等,設備驅動程序指爲每一種硬件控制器所編寫的設備驅動程序模塊。

    虛擬文件系統(VFS)是 Linux 內核中非常有用的一個方面,因爲它爲文件系統提供了一個通用的接口抽象。VFS 在 SCI 和內核所支持的文件系統之間提供了一個交換層。即VFS 在用戶和文件系統之間提供了一個交換層。

什麼是SCI
嵌入式Linux-系統調用SCI

一,SCI簡介
System Call Interface(SCI) 是用戶空間訪問內核空間的一個接口。
在不同的CPU架構下,SCI陷入內核的方法是不同的。比如x86下是通過0x80軟中斷來陷入內核的,而ARM下是通過swi(software interrupt)指令來陷入內核的,但是實質都是差不多的。

二,SCI的原理
我們都在系統中執行過SCI,比如read,write,但是你知道它的原理嗎,你知道如何向Linux中添加一個新的系統調用嗎?請看後文。

SCI原理簡介(entry-common.S):
在指定系統調用read時,swi指令會將read的系統調用編號存到R7寄存器中,然後在內核空間利用R7中的編號在系統調用表中查找read對應的sys_read函數,進而執行。

其中比較重要的是系統調用表(Sys Call Table), 它在/arch/arm/kernel/calls.h中,我們填寫新的系統調用需要修改這個文件。
詳情請見: http://m.blog.csdn.net/qq_22075977/article/details/54708809

這裏寫圖片描述

在 VFS 上面,是對諸如 openclosereadwrite 之類的函數的一個通用 API 抽象。在 VFS 下面是文件系統抽象,它定義了上層函數的實現方式。它們是給定文件系統(超過 50 個)的插件。文件系統的源代碼可以在 ./linux/fs 中找到。
  文件系統層之下是緩衝區緩存,它爲文件系統層提供了一個通用函數集(與具體文件系統無關)。這個緩存層通過將數據保留一段時間(或者隨即預先讀取數據以便在需要是就可用)優化了對物理設備的訪問。緩衝區緩存之下是設備驅動程序,它實現了特定物理設備的接口。
      因此,用戶和進程不需要知道文件所在的文件系統類型,而只需要象使用 Ext2  文件系統中的文件一樣使用它們。
4. 設備驅動程序 
      設備驅動程序是 Linux  內核的主要部分。和操作系統的其它部分類似,設備驅動程序運行在高特權級的處理器環境中,從而可以直接對硬件進行操作,但正因爲如此,任何一個設備驅動程序的錯誤都可能導致操作系統的崩潰。設備驅動程序實際控制操作系統和硬件設備之間的交互。設備驅動程序提供一組操作系統可理解的抽象接口完成和操作系統之間的交互,而與硬件相關的具體操作細節由設備驅動程序完成。一般而言,設備驅動程序和設備
的控制芯片有關,例如,如果計算機硬盤是 SCSI  硬盤,則需要使用 SCSI  驅動程序,而不是 IDE 驅動程序。
5.網絡接口(NET)   

       提供了對各種網絡標準的存取和各種網絡硬件的支持。網絡接口可分爲網絡協議和網絡驅動程序。網絡協議部分負責實現每一種可能的網絡傳輸協議。衆所周知,TCP/IP  協議是 Internet  的標準協議,同時也是事實上的工業標準。Linux  的網絡實現支持 BSD 套接字,支持全部的TCP/IP協議。Linux內核的網絡部分由BSD套接字、網絡協議層和網絡設備驅動程序組成。 
    網絡設備驅動程序負責與硬件設備通訊,每一種可能的硬件設備都有相應的設備驅動程序。
2 . linux shell
shell是系統的用戶界面,提供了用戶與內核進行交互操作的一種接口。它接收用戶輸入的命令並把它送入內核去執行,是一個命令解釋器。另外,shell編程語言具有普通編程語言的很多特點,用這種編程語言編寫的shell程序與其他應用程序具有同樣的效果。
目前主要有下列版本的shell1.Bourne Shell:是貝爾實驗室開發的。  
2.BASH:是GNU的Bourne Again Shell,是GNU操作系統上默認的shell,大部分linux的發行套件使用的都是這種shell3.Korn Shell:是對Bourne SHell的發展,在大部分內容上與Bourne Shell兼容。    

4.C Shell:是SUN公司Shell的BSD版本。

3 . linux 文件系統

文件系統是文件存放在磁盤等存儲設備上的組織方法。Linux系統能支持多種目前流行的文件系統,如EXT2、 EXT3、 FAT、 FAT32、 VFAT和ISO9660。

3.1 文件類型

Linux下面的文件類型主要有:
1) 普通文件:C語言元代碼、SHELL腳本、二進制的可執行文件等。分爲純文本和二進制。
2) 目錄文件:目錄,存儲文件的唯一地方。
3) 鏈接文件:指向同一個文件或目錄的的文件。
4) 設備文件:與系統外設相關的,通常在/dev下面。分爲塊設備和字符設備。

5)管道(FIFO)文件 : 提供進程建通信的一種方式
6)套接字(socket) 文件: 該文件類型與網絡通信有關

可以通過ls –l, file, stat幾個命令來查看文件的類型等相關信息。

3.2 Linux目錄
  文件結構是文件存放在磁盤等存貯設備上的組織方法。主要體現在對文件和目錄的組織上。
  目錄提供了管理文件的一個方便而有效的途徑。

  Linux使用標準的目錄結構,在安裝的時候,安裝程序就已經爲用戶創建了文件系統和完整而固定的目錄組成形式,並指定了每個目錄的作用和其中的文件類型。

  完整的目錄樹可劃分爲小的部分,這些小部分又可以單獨存放在自己的磁盤或分區上。這樣,相對穩定的部分和經常變化的部分可單獨存放在不同的分區中,從而方便備份或系統管理。目錄樹的主要部分有 root、/usr、/var、/home  等(圖2) 。這樣的佈局可方便在 Linux 計算機之間共享文件系統的某些部分。 

這裏寫圖片描述

3.3 Linux磁盤分區

一、主分區,擴展分區和邏輯分區:  

linux分區不同於windows,硬盤和硬盤分區在Linux都表示爲設備.

硬盤分區一共有三種:主分區,擴展分區和邏輯分區。   

硬盤的分區主要分爲主分區(Primary Partion)和擴展分區(Extension Partion)兩種,主分區和擴展分區的數目之和不能大於四個。

主分區(Primary Partion):可以馬上被使用但不能再分區。

擴展分區(Extension Partion):必須再進行分區後才能使用,也就是說它必須還要進行二次分區。

邏輯分區((Logical Partion)):由擴展分區建立起來的分區。邏輯分區沒有數量上限制。

擴展分區只不過是邏輯分區的“容器”,實際上只有主分區和邏輯分區進行數據存儲。 

二、Linux下硬盤分區的標識

硬盤分區的標識一般使用/dev/hd[a-z]X或者/dev/sd[a-z]X來標識,其中[a-z]代表硬盤號,X代表硬盤內的分區號。

整塊硬盤分區的塊號標識:Linux下用hda、hdb、sda、sdb 等來標識不同的硬盤;

其中:

IDE接口硬盤:表示爲/dev/hda1、/dev/hdb ...;

SCSI 接口的硬盤、SATA接口的硬盤表示爲/dev/sda、/dev/sdb ... ... ;

硬盤內的分區:如果X的值是1到4,表示硬盤的主分區(包含擴展分區);邏輯分區從是從5開始的,比如/dev/hda5肯定是邏輯分區了;

例如:

用hda1、hda2、 hda5、hda6 來標識不同的分區。其中,字母a 代表第一塊硬盤,b代表第二塊硬盤,依次類推。而數字1 代表一塊硬盤的第一個分區、2 代表第二個分區,依次類推。1 到4 對應的是主分區(Primary Partition)或擴展分區(Extension Partition)。從5開始,對應的都是硬盤的邏輯分區(Logical Partition)。一塊硬盤即使只有一個主分區,邏輯分區也是從5開始編號的,這點應特別注意。

總結:一個硬盤分區首先要大確認在哪個硬盤,然後再確認它所在硬盤內的哪個分區。
發佈了57 篇原創文章 · 獲贊 35 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章