經(jīng)過(guò)前面的學(xué)習(xí),我們了解了驅(qū)動(dòng)開(kāi)發(fā)的框架,本章節(jié)將帶領(lǐng)大家實(shí)驗(yàn)操作,寫(xiě)最簡(jiǎn)單的驅(qū)動(dòng)-helloworld。 Linux 設(shè)備驅(qū)動(dòng)會(huì)以內(nèi)核模塊的形式出現(xiàn),因?yàn)?linux 內(nèi)核的整體架構(gòu)就非常龐大,包含的組件也非常多,如果把所有的功能都編譯到 linux 內(nèi)核中會(huì)使得內(nèi)核非常臃腫,為了解決這個(gè)問(wèn)題,更方便地新增和刪除功能,linux 提供了這樣的機(jī)制,這種機(jī)制被稱為模塊。為了大家對(duì)模塊有一個(gè)感性的認(rèn)識(shí),我們先來(lái)看一個(gè)最簡(jiǎn)單的驅(qū)動(dòng)-helloworld。 驅(qū)動(dòng)分為四個(gè)部分: 頭文件 驅(qū)動(dòng)模塊的入口函數(shù)和出口函數(shù) 聲明信息 功能實(shí)現(xiàn) 我們?cè)?windows 上面新建一個(gè) helloworld.c 文件,這里使用 sourceinsight 來(lái)編輯文件,大家也可以用其他編譯器來(lái)編寫(xiě)程序。 第一步 包含頭文件 #include #include 第二步 驅(qū)動(dòng)模塊的入口函數(shù)和出口函數(shù) module_init(); module_exit(); 第三步 聲明模塊擁有開(kāi)源許可證 MODULE_LICENSE("GPL"); 第四步 功能實(shí)現(xiàn):內(nèi)核模塊加載的時(shí)候打印 hello world! ,內(nèi)核模塊卸載的時(shí)候打印 gooodbye! 注意:內(nèi)核打印函數(shù)不能用 printf,因?yàn)閮?nèi)核沒(méi)有辦法使用 C 語(yǔ)言庫(kù)。 static int hello_init(void){ printk("hello world! \n"); return 0; } static void hello_exit(void){ printk("gooodbye! \n"); } 完整的一個(gè)最簡(jiǎn)單的 Linux 內(nèi)核模塊,如下圖所示: ![]() 此時(shí),我們需要有一個(gè)感性認(rèn)識(shí),代碼中的某些陌生元素都是 linux 內(nèi)核為了字符設(shè)備定義的,以實(shí)現(xiàn)驅(qū)動(dòng)與內(nèi)核接口而定義的。Linux 對(duì)各類設(shè)備的驅(qū)動(dòng)都定義了類似的數(shù)據(jù)結(jié)構(gòu)和函數(shù)。 ![]() 核心板參數(shù) 尺寸:38mm*42mm PCB:6層 CPU:iMX6ULL ARM Cortex-A7架構(gòu) 單核 iMX6ULL 商業(yè)級(jí) 內(nèi)存:512M 存儲(chǔ):8G EMMC iMX6ULL 工業(yè)級(jí) 內(nèi)存:256M 存儲(chǔ):512M FLASH 工作電壓:5V~16V 電壓供電 系統(tǒng)支持:Linux-QT系統(tǒng);Ubuntu core系統(tǒng);Youcto系統(tǒng);Buildroot系統(tǒng); 商業(yè)級(jí)運(yùn)行溫度:-20℃ ~ +80℃ 工業(yè)級(jí)運(yùn)行溫度:-40℃ ~ +80℃ 引腳間距:1.27mm 引角擴(kuò)展:i.MX6功能全部引出,146PIN腳 連接方式:郵票孔 底板參數(shù) 尺寸:12*19cm PCB:2層 POWER:5V~16V電壓供電 SWITCH:電源開(kāi)關(guān) EEPROM 存儲(chǔ):256字節(jié),掉電后數(shù)據(jù)不丟失 4G模塊:1個(gè) 全網(wǎng)通 (選配) WIFI藍(lán)牙模塊:WIFI/藍(lán)牙二合一模塊,工作頻段 2.4GHz,支持 IEEE802.11bgn 等標(biāo)準(zhǔn),支持藍(lán)牙 4.0 協(xié)議。 LVDS接口:1路(一個(gè)是標(biāo)準(zhǔn)HDMI 座(CON3),另一個(gè)是 30pin 的 FPC 座(J18), 兩個(gè)接口實(shí)際上是同一路 LVDS 信號(hào),用來(lái)連接迅為電子的 LVDS 屏幕) RGB接口:1路 CAN:2 路 CAN 總線接口 RS485:1 路 RS485 總線接口 MIC:支持錄音輸入 PHONE:支持耳機(jī)輸出 USB OTG:1路 USB HOST:2路 USB-UART:1路 mini HDMI:1個(gè)(一路標(biāo)準(zhǔn)MINI-HDMI 接口,i.MX6ULL處理器本身沒(méi)有支持HDMI,通過(guò)一個(gè) RGB 轉(zhuǎn) HDMI 的芯片擴(kuò)展出HDMI接口,通過(guò)該接口來(lái)連接HDMI顯示器。 ) 網(wǎng)口:2路百兆以太網(wǎng),RJ45 接口 TF卡槽:1個(gè)標(biāo)準(zhǔn)TF卡接口 SIM卡槽:1個(gè)標(biāo)準(zhǔn)SIM卡接口 T&H接口:溫濕度傳感器接口 TTL/RS485接口:TTL/RS485接口二選一 BUZZER:1個(gè)蜂鳴器 IRDA:1個(gè)紅外一體化接收頭 ADC電位器:支持 DIP SWITCH:8位撥碼開(kāi)關(guān) JTAG:1個(gè)(可以通過(guò)下載/調(diào)試器來(lái)調(diào)試 i.MX6ULL 處理器) CAMERA接口:1個(gè) 支持500萬(wàn)攝像頭 TTL串口接口:20PIN (gpio引出:兩個(gè)ad,一個(gè)spi,一路ttl。一路i2c,5個(gè)gpio,5v,3.3v電源) GPIO接口:20PIN(包括:兩路ADC,一路SPI,5個(gè)GPIO,一路TTL串口,一路I2C接口。) 重力加速度傳感器:支持 紅外接收模塊:支持 光環(huán)境傳感器:支持 實(shí)時(shí)時(shí)鐘:斷電后系統(tǒng)時(shí)間不丟失 LED:2個(gè) 按鍵:3個(gè) |