Shell腳本根據設備名自動獲取設備號

寫驅動的時候如果使用自動分配設備號的方式,在創建設備結點的時候需要在 '/proc/devices' 文件中查看一下所分配的設備號。可以通過awk命令:

awk '{if($2=="your-driver") {print $1}}' /proc/devices

mknod.sh

這個腳本能夠自動獲取設備號並創建設備節點:

#!/bin/bash

driver=$1
dir=$2
major=`awk "{if(\\$2==\\"$driver\\") {print \\$1}}" /proc/devices`
#major=`awk '{if(\$2=="usb") {print \$1}}' /proc/devices`
mknod /dev/$dir/$driver c $major 0

把腳本保存爲 mknod.sh,使用命令'chmod +x mknod.sh'改成可執行文件,再使用如下命令在/dev/your-dir目錄下創建設備節點:

./mknod.sh your-driver your-dir

也可在/dev目錄下創建設備節點:

./mknod.sh your-driver

在Makefile中加入如下項目:

setup:
    insmod your-mod.ko
    mkdir /dev/your-dir
    ./mknod.sh your-driver your-dir

unsetup:
    rmmod your-mod.ko
    rm -rf /dev/your-dir

major.sh

這個腳本可返回設備號:

#!/bin/bash

driver=$1
awk "{if(\$2==\"$driver\") {print \$1}}" /proc/devices

在Makefile中加入如下內容:

setup:
    insmod your-mod.ko
    mkdir /dev/your-dir
    mknod /dev/your-dir/your-driver c `./major.sh your-driver` 0

unsetup:
    rmmod your-mod.ko
    rm -rf /dev/your-dir

Makefile

Makefile也可以不借助shell腳本實現:

setup:
    insmod your-mod.ko
    mkdir /dev/your-dir
    mknod /dev/your-dir/your-driver c `awk '{if($$2=="your-driver") {print $$1}}' /proc/devices` 0

unsetup:
    rmmod your-mod.ko
    rm -rf /dev/your-dir

需要注意的是Makefile中$的轉義和Shell中不一樣。在Makefile 中 "$"、"#" 有特殊含義,轉義方式爲 "/#"、"$$"。

總結

本文嘗試了三種方式的Makefile,區別只在於對awk命令進行了不同方式的轉義:

setup:
    insmod your-mod.ko
    mkdir /dev/your-dir
    ./mknod.sh your-driver your-dir
    mknod /dev/your-dir/your-driver c `./major.sh your-driver` 0
    mknod /dev/your-dir/your-driver c `awk '{if($$2=="your-driver") {print $$1}}' /proc/devices` 0

注:

  1. 本文中shell腳本可以直接使用,但是Makefile示例需要把your-mod,your-driver,your-dir改成你自己的東西。
  2. 注意'和`的區別,一個在數字鍵1的左邊,一個在;的右邊。
發佈了15 篇原創文章 · 獲贊 14 · 訪問量 20萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章