//---------------------------------------------------------------- //==//auto create device node//==// vpu_dev_class = class_create(THIS_MODULE, VPU_DEV_NAME); if (IS_ERR(vpu_dev_class)){ INFO("can't create class %s\n", VPU_DEV_NAME); ret = PTR_ERR(vpu_dev_class); return ret;//return -EFAULT; } vpu_dev = class_device_create(vpu_dev_class, NULL, MKDEV(VPU_MAJOR, VPU_MINOR), NULL, VPU_DEV_NAME); if (IS_ERR(vpu_dev)){ INFO("failed to create device %s", VPU_DEV_NAME); ret = PTR_ERR(vpu_dev); return ret;//return -EFAULT; } //device_destroy(vpu_dev_class, MKDEV(VPU_MAJOR, VPU_MINOR)); //class_destroy(vpu_dev_class); //---------------------------------------------------------------- REF://http://daydreamer.idv.tw/rewrite.php/read-49.html 過年前跑去書店打發無聊的時間,看到這個月又出了兩本跟linux device driver相關的書籍,隨手拿起來翻翻,發現其中有一篇寫到udev framework,裡面詳盡解釋device node在insert kernel module時如何自動建立,並且可隨著使用者更改規則而產生persistent node…等不同於devfs的變化 在udev的官方網頁有篇不錯的conference paper,裡面有提到幾個重點,udev的出現為了解決目前在devfs上碰到的3個問題 1.udev能夠根據規則建立device node(這可以解決probing時,device node可能會依probing的順序不同而改變) 2.udev動態建立device node,不會像以前在/dev資料夾下擺一堆多而無用的device node 3.提供user更方便的API存取目前device的資訊,在kernel 2.6以上已提供sysfs這個device管理機制 udev運作的原理很簡單,它透過netlink得知目前kernel有那些module新增了,在收到kernel module新增的netlink訊息之後,它會先掃描user是否有指派device node rule,如果沒有,會自動根據module的major和minor number建立device node.有一點比較特殊的地方是,udev用inotify監聽rule變化的event,所以可以即時改變device node的狀態,udev的架構圖可參考如下 那我做個小實驗,看看udev到底是如何運作的,這個實驗分為兩個部份,一個是character kernel module,而另外一個就是udev的user space program(下載udev-137.tar.gz) http://www.us.kernel.org/pub/linux/utils/kernel/hotplug/ character kernel module寫作的重點在於init時會建立class與create device character kernel module寫作的重點在於init時會建立class與create device charmodule_class=class_create(THIS_MODULE, DEVICE_NAME); if (IS_ERR(charmodule_class)) return -EFAULT; device_create(charmodule_class, NULL, MKDEV(driver_major, 0), DEVICE_NAME); character kernel moduel移除時會remove class和destroy device device_destroy(charmodule_class,MKDEV(driver_major, 0)); class_destroy(charmodule_class); 我把udevd和udevadm移植到實驗平台,並且執行指令udevd –d,當我insert character kernel module時,udevd會自動幫我建立device node
文章標籤
全站熱搜
創作者介紹
創作者 BB 的頭像
BB

Welkin小窩

BB 發表在 痞客邦 留言(0) 人氣(2,074)