Linux嵌入式系統開發之Led開發 驅動篇

2021-06-06 02:51:58 字數 2706 閱讀 6752

linux嵌入式系統開發之led開發---驅動篇

「小濤哥,你給我說說昨天那個led驅動吧,我知道咋用程式點亮它了,可是呼叫的是驅動,我就是乙個命令,感覺不知道究竟怎麼弄的..」小王央求道。

「這樣啊, 那也行,要不咱們這樣以後,就講一次應用,然後就講與之相關的驅動開發,趁著應用的熱度,順便把驅動學了…」我想想說。

「好好,那今天就開始昨天的那個led驅動程式開發吧…」

首先需要說明的是led裝置是個字元裝置,這就和咱們本部落格的linux裝置驅動開發裡的字元裝置驅動關聯起來了,不懂,就自己去看了,開始今天的重點內容.在mini24

1)引腳功能設為輸出。  2)要點亮led,令引腳輸出為0.      3)要熄滅led,令引腳輸出為1.

好了下邊,給出詳細的原始碼注釋:

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define device_name     "leds_control"  /* 載入模式後,執行」cat /proc/devices」命令看到的裝置名稱 */
#define led_major       231     /* 主裝置號 */ 

#define ioctl_led_on 0 /* 應用程式執行ioctl(fd, cmd, arg)時的第2個引數 */

#define ioctl_led_off 1

static

unsigned

long led_table = ;

static

unsigned

int led_cfg_table = ;

//應用程式對裝置檔案/dev/leds執行open(...)時,就會呼叫s3c2410_leds_open函式

static

int s3c2410_leds_open(struct inode *inode, struct file *file)

return 0;

} //應用程式對裝置檔案/dev/leds執行ioclt(...)時,就會呼叫s3c2410_leds_ioctl函式

static

int s3c2410_leds_ioctl(

struct inode *inode,

struct file *file,

unsigned

int cmd,

unsigned

long arg)

switch(cmd)

} //字元裝置驅動程式的核心,當應用程式操作裝置檔案時所呼叫的open、read、write等函式,最終會呼叫這個結構中指定的對應函式

static

struct file_operations s3c2410_leds_fops = ;

//執行「insmod s3c2410_leds.ko」命令時就會呼叫這個函式

static

int __init s3c2410_leds_init(void)

printk(device_name "initialized\n");

return 0;

}

//執行」rmmod s3c24xx_leds.ko」命令時就會呼叫這個函式 

static

void __exit s3c2410_leds_exit(void)

module_init(s3c2410_leds_init); /* 指定驅動程式的初始化函式和解除安裝函式 */

module_exit(s3c2410_leds_exit);

小王,上面的**看清楚了嗎,那麼怎麼使用呢,使用方法有兩種(假設儲存為leds_control.c):

方法一:

將**放到內和drivers/char目錄下,在drivers/char/makefile中增加一行obj-m    += leds_control.o,然後在核心根目錄下執行make modules,就可以生成模組drivers/char/leds_control.ko。

方法二:

直接在當前驅動原始碼目錄下,建立makefile檔案,內容如下:

cross=arm-linux-

#依賴的核心源**目錄,不一定是當前系統的,要是開發板系統原始碼的目錄

kerneldir = /opt/linux-2.6.32.2

pwd := $(shell pwd)

.phony:

modules clean

obj-m += leds_control.o

modules:

$(make) -c $(kerneldir) m=$(pwd) modules

clean:

rm -rf *.o *~ core .depend .*.cmd  *.mod.c .tmp_versions

然後執行make,可以看到在當前目錄下也會生成leds_control.ko.

insmod ./leds_control.ko

mknod /dev/leds_control c 150 0

「嗯,我明白了,你這樣一說,我幾乎都明白了,led的前前後後的工作模式,不要和你說了,我也抓緊時間調調我的自己led驅動」小王嬌氣的說。

嵌入式Linux系統開發

對於嵌入式系統,大家都很熟悉吧 現在隨著網路的發展,嵌入式已經成為it最有發展前途的乙個行業,所以很多人都想著學習嵌入式。舉個列子吧 對於乙個新手來說,如果讓他完成一項linux的系統開發,對他而言難於上青天 在凌陽教育是這樣安排的一些課程 linux系統提供了許許多多的功能,作為乙個軟體開發人員我...

嵌入式Linux系統開發6

學習嵌入式系統就是學習使用者程式設計api 通過核心提供的服務實現相應的功能 c語言程式設計 無os 語法!1 linux系統構成劃分 使用者空間 核心空間。2 劃分空間的目的 保護核心空間不能被使用者空間隨便訪問。嵌入式linux c開發 會看使用說明書 使用者空間不能隨便訪問核心空間 3 使用者...

嵌入式系統開發流程

如果在乙個嵌入式系統中使用 linux技術開發 根據應用需求的不同有不同的配置開發方法,但是,一般情況下都需要經過如下的過程 配置開發主機,配置minicom,一般的引數為波特率115200 baud s,資料位8位,停止位為1,9,無奇偶校驗,軟體硬體流控設為無。在windows下的超級終端的配置...