1. 程式人生 > >智慧家居實訓第七天 驅動使用

智慧家居實訓第七天 驅動使用

一、嵌入式領域   軟體開發    -----》linux環境/邏輯/演算法(上層應用)   系統開發    -----》linux核心運維(shell指令碼)   驅動開發    -----》電路分析/硬體構造/驅動設計    二、LED燈   驅動工程師:   1)驅動原始碼:led.c   2)驅動檔案:ked.ko    三、軟體應用層如何去使用底層的驅動?   1.分析原始碼led.c     1.1驅動裡面沒有主函式(main)        應用層才會出主函式     1.2驅動中輸入字串使用的是printk();        檢視列印等級:            cat /proc/sys/kernel/printk          7       7       1       7         #define KERN_EMERG      "<0>" /* system is unusable */                    /*緊急事件訊息,系統崩潰之前提示,表示系統不可用*/     #define KERN_ALERT      "<1>" /* action must be taken immediately */                    /*報告訊息,表示必須立即採取措施*/     #define KERN_CRIT       "<2>" /* critical conditions */                    /*臨界條件,通常涉及嚴重的硬體或軟體操作失敗*/     #define KERN_ERR        "<3>" /* error conditions */                    /*錯誤條件,驅動程式常用KERN_ERR來報告硬體的錯誤*/     #define KERN_WARNING    "<4>" /* warning conditions */                   /*警告條件,對可能出現問題的情況進行警告*/     #define KERN_NOTICE     "<5>" /* normal but significant condition */                   /*正常但又重要的條件,用於提醒*/     #define KERN_INFO       "<6>" /* informational */                  /*提示資訊,如驅動程式啟動時,列印硬體資訊*/     #define KERN_DEBUG      "<7>" /* debug-level messages */                   /*除錯級別的訊息*/         應用層中輸出字串使用的是printf();

2.led.c結構

1)初始化函式   module_init(led_init);    2)為4盞燈LED申請GPIO口   gpio_request(led_gpios[i].gpio, led_gpios[i].name);           3)把4個GPIO口設定為輸出模式   gpio_direction_output(led_gpios[i].gpio,0);     4)註冊一個雜項裝置(結構體)   misc_register(&gec6818_led_dev);

5)定義的雜項裝置的成員   static struct miscdevice gec6818_led_dev = {     .minor            = MISC_DYNAMIC_MINOR,//動態分配裝置號     .name            = DEVICE_NAME,//led裝置節點檔名字     .fops            = &gec6818_led_dev_fops,//檔案操作集   };  

6)檔案操作集(驅動提供給函式介面 應用程式)   static struct file_operations gec6818_led_dev_fops = {     .owner            = THIS_MODULE, //模式狀態     .open           = led_open,    //開啟對應的gpio      .unlocked_ioctl    = gec6818_leds_ioctl,     //當你的應用程式呼叫ioctl函式是,驅動就會對應的gec6818_leds_ioctl };    7)為GPIO口號設定值   gpio_set_value(led_gpios[_IOC_NR(cmd)].gpio, arg);    驅動解除安裝時: 8)在核心登出模組   module_exit(gec5260_led_dev_exit);  9)釋放所有的GPIO口的資源    gpio_free(led_gpios[i].gpio);      10)移除雜項裝置  misc_deregister(&gec6818_led_dev);     四、如何去安裝/解除安裝驅動?   4.1 首先下載驅動映象檔案led.ko到6818開發平臺       4.2 檢視當期的開發板有沒有安裝過驅動           lsmod ----》檢查當前有沒有安裝驅動        4.3 安裝led驅動           insmod led.ko               

  github原始碼