fs4412開發板led驅動

2021-07-25 10:19:41 字數 2740 閱讀 1968

閱讀實驗手冊第16章《 led 驅動開發實驗 》p275下:

fs4412_led.c, fs4412_led.h, test.c 檔案

1.系統呼叫函式

test.c的main函式中,

while(1) 函式。函式如下:

函式分析:

(1).函式引數中的file指標對應於應用程式傳遞的檔案描述符fd,這和傳遞open方法的引數一樣。

cmd 由使用者空間直接不經修改的傳遞給驅動程式

arg 可選。

(2). 在驅動程式中實現的ioctl函式體內,實際上是有乙個switch 結構,每乙個case對應乙個命令碼,做出一些相應的操作。怎麼實現這些操作,這是每乙個程式設計師自己的事情,因為裝置都是特定的。

對應於這個函式,命令碼是fs4412_led.h檔案中定義的巨集命令:

(3). 使用者使用intioctl(int fd,unsinged long cmd,...)時,...就是要傳遞的引數;

再通過int(*ioctl)(struct inode *inode, struct file *filp, unsigned int cmd, unsignedlong arg)中的arg傳遞;

如果arg是乙個整數,可以直接使用;

如果是指標,我們必須確保這個使用者位址是有效的,因此,使用之前需要進行正確檢查。

對應於這個函式的copy_from_user指標,是內部有檢查的,我們不需要檢測。

2. 找出暫存器位址解析**並解釋

在fs4412_led.c檔案一開頭,定義了如下

#define fs4412_gpf3con  0x114001e0 //繫結暫存器位址(實體地址)

static unsigned int *gpf3con;  //定義指標(虛擬位址)

暫存器位址解析**:

fs4412_led.c檔案中的fs4412_led_ioremap()函式將io位址空間對映到核心的虛擬空間上,定義了位址與指標的關聯,從而可以利用得到的指標進行操作。這樣做的目的是保證函式安全。函式片段如下:

gpf3con = ioremap(fs4412_gpf3con, 4);

if (gpf3con == null) {

printk("ioremap gpf3con\n");

ret = -enomem;

return ret;

3. 找出暫存器讀寫**並解釋

fs4412_led_io_init()函式進行了暫存器讀寫

void fs4412_led_io_init(void)

writel((readl(gpf3con) & ~(0xff << 16)) | (0x11 << 16),gpf3con);

writel(readl(gpx2dat) & ~(0x3<<4), gpf3dat);

writel((readl(gpx1con) & ~(0xf << 0)) | (0x1 << 0),gpx1con);

writel(readl(gpx1dat) & ~(0x1<<0), gpx1dat);

writel((readl(gpx2con) & ~(0xf << 28)) | (0x1 << 28),gpx2con);

writel(readl(gpx2dat) & ~(0x1<<7), gpx2dat);

以第一行為例:

將gpf3con指標指向的那塊實體地址空間中的內容讀出來,進行& ~(0xff << 16)) | (0x11 << 16)等一系列操作後,再寫回gpf3con指向的物理空間中(0x114001e0)

4. 和裸機環境下的驅動程式設計,有何不同?試給出自己的理解和認識

裸機程式設計指的是沒有作業系統支援的硬體系統程式設計,而實際的程式設計工作肯定需要乙個環境,通常這樣的情況中,程式設計和編譯的環境叫做「宿主機」,最終的程式在「目標機」上執行(交叉編譯)。而os環境程式設計指的是最終執行的程式是在有作業系統支援的環境中執行,而程式設計和編譯的環境,可能是執行程式的機器(本地編譯),也可能不是(交叉編譯)。

裸機程式設計現在主要是正對低端的嵌入式系統,如scm(single chip machine)、各式mcu、dsp等。當然,編寫pc的bootloader肯定也屬於裸機程式設計。

裸機程式設計的最原始辦法是用組合語言(一種機器指令的一一對應的記法,和加上一些簡單的彙編偽指令),只能使用很有限的指令集,每行**只能做微小的事情。因此現在裸機程式設計也普遍使用更高階的語言(通常是c語言),那麼從c語言轉換到組合語言這個過程就叫做編譯。編譯器根據不同的機器,將通用的c**轉化為特定的機器**,只有十分少量的機器**仍然需要用到彙編,這其實是一種混合程式設計的模式。那麼,編譯器實在是一種十分重要的工具,編譯的理論和實踐知識也會十分豐富。

而在有os支援的環境中程式設計則更加便利了。首先os管理並擴充套件了整個機器資源,提供了乙個通用的api系統呼叫介面,程式設計師通過這個介面與硬體資源打交道,因此在os上程式設計更加不需要考慮機器的特性,換句話說就是移植性最佳。作為資源的擴充套件,os提供了大量的機制(包括程序、記憶體管理、裝置操作等等)和庫檔案(這些庫檔案屬於可重用的**),讓編寫實用程式更加便利。

FS4412開發板簡介

fs4412開發板介紹 1 簡介 fs4412 採用的處理器使用samsung 最新的arm cortex a9 四核cpu 的exynos4412,主頻達到1.4 1.6ghz。該晶元採用了最新的32nm 的先進工藝製程,功耗方面有了明顯的降低。soc system on chip exynos4...

linux系統移植(FS4412開發板)

linux系統移植主要由4大部分組成 1.交叉編譯器的安裝 2.u boot的移植 3.kernel的編譯與移植 4.根檔案系統的製作與移植 一.交叉編譯器的安裝 為什麼要安裝交叉編譯器?速度 開發板的編譯速度比較慢,而在虛擬機器上編譯速度快,節省時間 空間 編譯乙個檔案時,需要消耗很多資源,而開發...

華清遠見的fs4412開發板學習筆記 一

1.專案介紹 嵌入式 linux系統 2.linux系統 的使用 ubuntu 3.terminal 終端 早期計算機沒有圖形介面,人機互動只能依靠終端。使用者通過一些預定的一些指令可以與計算機互動。windows系統的前身 dos系統 cmd 或 powershell ipconfig 檢視網路設...