1. 程式人生 > >申請裝置號時兩個函式使用上的差異

申請裝置號時兩個函式使用上的差異

一、Linux上向系統申請裝置號的時候分為兩種情況

 

  1. 在已知裝置號的情況使用如下函式

         函式原型如下:

int register_chrdev_region(dev_t from, unsigned count, const char *name);

         from:裝置號

         count:是你請求的連續裝置數.

         name:裝置的名字

,他會出現在sysfs中

         缺點:裝置號有可能會衝突

 

    2. 在裝置號未知的情況下使用如下函式:

        函式原型如下:

int alloc_chrdev_region(dev_t *from, unsigned baseminor, unsigned count, const char *name);

         from:裝置號

         baseminor:次裝置號

         count:是你請求的連續裝置數.

         name:裝置的名字,他會出現在sysfs中

         使用該函式會向系統動態申請未被佔用的裝置號。函式呼叫成功之後,會把得到的裝置號放入第一個引數from中。

 

         優點:它會自動避開裝置號重複的衝突。

 

二、裝置號的釋放

         釋放裝置號統一使用下面函式:

void unregister_chrdev_region(dev_t from, unsigned count);

         from:裝置號

         count:是你請求的連續裝置數.

 

示例:

	int ret;
	static int globalmem_major = 250;
	dev_t devno = MKDEV(globalmem_major, 0);
        /*該函式會根據主裝置號和次裝置號生成總裝置號*/

	if (globalmem_major){
		ret = register_chrdev_region(devno, 1, "globalmem");
                /*裝置號為devno,申請一個裝置,裝置名字為globalmem*/
        } else {
		ret = alloc_chrdev_region(&devno, 0, 1, "globalmem");
		    /*自動生成devno,申請一個裝置,次裝置號為0,裝置名字為globalmem*/
	}