在核心調試的過程中,可以通過ls /dev/sd*檢視相關的資訊
SYMLINK是符号連結,但NAME是我們定義在/dev裡邊生成的,難道這個也叫符号連結
<a href="http://blog.itpub.net/10752019/viewspace-941275/" target="_blank">http://blog.itpub.net/10752019/viewspace-941275/</a>
<a href="http://bbs.chinaunix.net/thread-1961452-1-1.html" target="_blank">http://bbs.chinaunix.net/thread-1961452-1-1.html</a>
我增加了一個硬碟,核心将其命名為sdb,我嘗試寫了一條規則将NAME=sdc,并用LAST_RULE将後續的比對終止,用udevtrigger将其生效了(也重新開機過),在用fdisk -l的時候是看不到sdc的,也隻有sdb,但在dev下邊存在sdc,并可以分區,用fdisk可以産生sdc1,同時也産生sdb1了,但無法對sdc1進行mkfs,提示磁盤明顯不存在,
問題
1,為什麼仍有/dev/sdb的命名?規則中已經LAST_RULE了,50規則找到sdb也不該來比對他,
2,格式化sdc1為什麼不生效,難道是因為sdb是核心的命名,而udev定義的别名是使用者模式?核心無法識别?
但udev的用法不就是建立在可以給核心所識裝置來定義别名的基礎上嗎?
3,利用udevinfo可以檢視磁盤的detail來定義rule,NAME定義的是我們自己要在/dev下看到的名字,但核心的名字也出現在/dev下邊,核心的命名是必須在/dev下生效的呢?還是否需要重新寫一套完整的規則來替代50規則?
KERNEL=="sda"是否核心已經指定(可能是sysfs),是以其實重新配置設定名字
也隻是重建立立一個裝置節點而已,
為了能夠自定義生成相應的裝置名稱,需要比預設的系統配置50提前描述
編寫檔案如下錯誤:
将 2:0:0 上的裝置 igb0 設定透傳後,它就不會被附着
驅動程式了。2:0:1 上的裝置的名稱就會由 igb1 變為
igb0。這不正好就能由 pciconf -l 準确地反映出來嗎?
這樣,就可以根據 pciconf -l 的結果,将 2:0:1 上的裝置
确定地重命名為 net1,将 2:0:2 上的裝置重命名為 net2,
如此等等。
是不是有問題
DEVPATH=="/devices/pci0000:00/0000:00:10.0/host2/target2:0:1/2:0:1:0/block/sdb"
研究的議題:如何通過pci插槽綁定裝置名稱但是udev掃描插槽的時候,并不知道插槽的具體
命名方式,并且不同機器的插槽是否一樣的命名,如果隻是通過size,是否可行。
操作步驟1:
ID=="host2",SUBSYSTEM="block",NAME="mydisk"
invalid SUBSYSTEM operation
由于SUBSYSTEM的編寫規則出現錯誤,必須是==
正确如下:
ID=="host2",SUBSYSTEM=="block",NAME="mydisk"
ID_PATH=="pci-0000:00:10.0-scsi-0:0:1:0", SUBSYSTEM=="block",NAME="mydisk"
pciconf -l 是用來檢視目前 PCI 的 總線:插槽:功能
與裝置名的對應關系。
unknown key 'ID_PATH' in /etc/udev/rules,d/50-persistent-storage.rules
由于出現如上的錯誤,導緻無法正常進入系統,這個時候采用的系統隻能夠通過
重新挂載根檔案系統變成可讀寫的方可以進入系統
mount -o remount,rw /dev/sda2 /
操作步驟2:
嘗試修改核心指定的盤符,取消原有的裝置辨別
kernel=="sdb",NAME="MYDISK"
出現如下的麻煩:
1)fdisk -l 無法識别裝置,但是能夠正常的挂載,結果發現裝置分區MYDISK2和MYDISK1根本不存在,而且不能夠挂載,是否需要重新部署這個裝置名稱,發現這個方法沒有任何的意義。
udev介紹:
1.udev規則檔案:
/etc/udev/rules.d/ # 使用者自定義的規則檔案一般放在這 /lib/udev/rules.d/
2.udev主配置檔案:
/etc/udev/udev.conf
3.(檔案名中的)50為預設值;數值越小越先被解析。
4.udev工具包括udevadm、udevcontrol、udevinfo、udevmonitor、udevsettle、udevtest、 udevtrigger,都被內建到了udevadm中。
如下是猜測:
你想要的效果不是udev的工作,udev隻是根據sysfs中的資訊來生成/dev下的裝置節點,你的驅動程式中必須進行相應的操作向sysfs檔案系統注冊裝置才行。
下面是一個在sysfs中注冊adc裝置資訊,之後udev會自動在/dev下生成裝置adc的部分代碼:
。。。。。。
/* creating adc class */
adc_class = class_create(THIS_MODULE, "adc");
if (IS_ERR(adc_class))
{
printk(KERN_ERR "failed in creating class!\n");
goto fail;
}
/* register adc device in sysfs,
* and this will cause mdev to create corresponding device node
*/
device_create(adc_class, NULL, devno, "adc");
。。。。。
要帶達到你說的效果,修改驅動程式是可以的。
ATTR{UDISKS_PARTITION_SIZE}=="337204224"
SYSFS{size}=="337204224"
172730880
現在确實已經發生 了盤符的改變,但是不知道是否是在核心啟動的時候改變的,
還是
本文轉自fengyuzaitu 51CTO部落格,原文連結:http://blog.51cto.com/fengyuzaitu/1612007,如需轉載請自行聯系原作者