Linux 自動配置主設備號
九月 9th, 2007
在撰寫 Linux 設備驅動程式的時候,如果指定主設備號(MAJOR)為 0,就可以利用 alloc_chrdev_region() 函式讓系統自動分配一個可用 MAJOR 給裝置,程式片段:
#define DEV_NAME "LED" //設備名稱 int DEV_MAJOR = 0; //主設備號 int DEV_MINOR = 0; //次設備號 int count = 1; dev_t led_dev; /* Dynamic assign major */ result = alloc_chrdev_region(&led_dev, DEV_MAJOR, count, DEV_NAME); DEV_MAJOR = MAJOR(led_dev);
這樣驅動寫好後載入核心執行,就會分配到一個 MAJOR,可利用 cat /proc/devices 查看,但是如果要存取這個設備,還需要手動用 mknod 在 /dev 建立設備檔,但問題是怎麼知道分配到的設備號碼是什麼?這裡利用一個 shell script 搭配 awk 來達成。
#!/bin/sh
module = "LED" // /proc/device 顯示的名稱
device = "LED" // /dev 要建立的設備檔名稱
major=`cat /proc/devices | awk "\\$2==\"$module\" {print \\$1}"`
mknod /dev/$device c $major 0 //建立字元設備
然後只要將這個 script 檔案設成啟動時執行就可以囉!
近期迴響