亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
12下一頁
最近訪問板塊 發(fā)新帖
查看: 10225 | 回復(fù): 13
打印 上一主題 下一主題

2.6.26.8 的內(nèi)核里邊,device_create()為什么會失? [復(fù)制鏈接]

論壇徽章:
3
卯兔
日期:2013-08-26 22:14:57未羊
日期:2013-09-08 19:16:05未羊
日期:2014-10-23 10:34:12
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2009-12-19 17:20 |只看該作者 |倒序瀏覽
前面那個驅(qū)動剛開始沒注意條件判斷反了,錯以為是kmalloc沒成功,下午調(diào)試發(fā)現(xiàn)是device_create失敗了


        printk("pre-create device_class!!!\n");
        //device_create(my_class, NULL, dev, NULL, DEVICE_NAME "%d", LED_MINOR );//dev為開始處MKDEV產(chǎn)生的,其類型為dev_t
        device_create(my_class, NULL, dev, NULL, "DEVICENAME%d" );// , LED_MINOR );
        printk("finished to create device_class!!!\n");

device_create,第一個printk打印了,然后內(nèi)核就掛了:
Unable to handle kernel NULL pointer dereference at virtual address 00000000
pgd = c0004000
[00000000] *pgd=00000000
Internal error: Oops: 5 [#1]


請教一下大大們,這個device_create到底該怎么用哇?

看了下她的接口,感覺沒有用錯的哇,為什么會create失敗了?

論壇徽章:
3
卯兔
日期:2013-08-26 22:14:57未羊
日期:2013-09-08 19:16:05未羊
日期:2014-10-23 10:34:12
2 [報告]
發(fā)表于 2009-12-19 18:25 |只看該作者
周末難道都出去high了么?

論壇徽章:
0
3 [報告]
發(fā)表于 2009-12-20 00:33 |只看該作者
Note

the struct class passed to this function must have previously been created with a call to class_create.

LZ的 MY_CLASS怎么來的?可以檢查下。

論壇徽章:
3
卯兔
日期:2013-08-26 22:14:57未羊
日期:2013-09-08 19:16:05未羊
日期:2014-10-23 10:34:12
4 [報告]
發(fā)表于 2009-12-20 10:03 |只看該作者
#include <linux/device.h> /*  struct class *my_class;

struct class *my_class;

my_class = class_create(THIS_MODULE , "led-class");

if(IS_ERR(my_class))
{
      printk("failed to creat class\n ");
      return -1;
}

這個地方class_create成功了,那個if里邊的沒有打印,更沒有返回

接著往下就是device_create,之前還打印了條消息,然后就掛在device_create,后面緊接著的打印沒有出來

論壇徽章:
0
5 [報告]
發(fā)表于 2009-12-20 20:58 |只看該作者
if(IS_ERR(my_class))

IS_ERR如何實現(xiàn)的?

論壇徽章:
0
6 [報告]
發(fā)表于 2009-12-20 21:19 |只看該作者
"DEVICENAME%d" 把%d去掉試試

論壇徽章:
3
卯兔
日期:2013-08-26 22:14:57未羊
日期:2013-09-08 19:16:05未羊
日期:2014-10-23 10:34:12
7 [報告]
發(fā)表于 2009-12-20 21:39 |只看該作者
include/linux/err.h

static inline long IS_ERR(const void *ptr)
{
        return IS_ERR_VALUE((unsigned long)ptr);
}

IS_ERR我看網(wǎng)上有人這樣用,我就也這樣用了

論壇徽章:
3
卯兔
日期:2013-08-26 22:14:57未羊
日期:2013-09-08 19:16:05未羊
日期:2014-10-23 10:34:12
8 [報告]
發(fā)表于 2009-12-20 21:39 |只看該作者
原帖由 @sky 于 2009-12-20 21:19 發(fā)表
"DEVICENAME%d" 把%d去掉試試



%d去掉也試過,同樣會掛在device_create

論壇徽章:
0
9 [報告]
發(fā)表于 2009-12-21 09:33 |只看該作者
device_create(my_class, NULL, dev, NULL, "DEVICENAME%d" );// , LED_MINOR );

:em12:

你第五個參數(shù)"DEVICENAME%d"是個格式化的字符串,既然帶了%d,后面的參數(shù)就不可省略。
device_create(my_class, NULL, dev, NULL, "DEVICENAME%d" , LED_MINOR);
與printf類似..
你省略掉后,device_create里面調(diào)用的vsnprintf不出錯才怪了.內(nèi)核當(dāng)然認為%d對應(yīng)的變量地址是NULL
Unable to handle kernel NULL pointer dereference at virtual address 00000000

你甚至可以這樣寫這個函數(shù)

char * str = "abcde";
int inta = 10;
device_create(my_class, NULL, dev, NULL, "DEVICENAME%d%s%d", LED_MINOR, str, inta);

記住:格式化串必須對應(yīng)參數(shù).
:em12:

論壇徽章:
0
10 [報告]
發(fā)表于 2009-12-21 09:34 |只看該作者
原帖由 lelee007 于 2009-12-20 21:39 發(fā)表



%d去掉也試過,同樣會掛在device_create



你LED_MINOR怎么定義的?
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP