关于usb_init函数,第二个问题是,第868行的nousb表示什么?
知道C语言的人都会知道nousb是一个标志,只是不同的标志有不一样的精彩,这里的nousb是用来让我们在启动内核的时候通过内核参数去掉USB子系统的,Linux社会是一个很人性化的世界,它不会去逼迫我们接受USB,一切都只关乎我们自己的需要。不过我想我们一般来说是不会去指定nousb的吧。如果你真的指定了nousb,那它就只会幽怨的说一句“USBsupportdisabled”,然后退出usb_init。
nousb在drivers/usb/core/usb.c文件中定义为:
staticintnousb;/*DisableUSBwhenbuiltintokernelimage*/
module_param_named(autosuspend,usb_autosuspend_delay,int,0644);
MODULE_PARM_DESC(autosuspend,"defaultautosuspenddelay");
从中可知nousb是个模块参数。关于模块参数,我们都知道可以在加载模块的时候可以指定,但是如何在内核启动的时候指定?
打开系统的grub文件,然后找到kernel行,比如:
kernel/boot/vmlinuz-2.6.18-kdbroot=/dev/sda1rosplash=silentvga=0x314
其中的root,splash,vga等都表示内核参数。当某一模块被编译进内核的时候,它的模块参数便需要在kernel行来指定,格式为“模块名.参数=值”,比如:
modprobeusbcoreautosuspend=2
对应到kernel行,即为:
usbcore.autosuspend=2
通过命令“modinfo-p${modulename}”可以得知一个模块有哪些参数可以使用。同时,对于已经加载到内核里的模块,它们的模块参数会列举在/sys/module/${modulename}/parameters/目录下面,可以使用“echo-n${value}>/sys/module/${modulename}/parameters/${parm}”这样的命令去修改。
知道C语言的人都会知道nousb是一个标志,只是不同的标志有不一样的精彩,这里的nousb是用来让我们在启动内核的时候通过内核参数去掉USB子系统的,Linux社会是一个很人性化的世界,它不会去逼迫我们接受USB,一切都只关乎我们自己的需要。不过我想我们一般来说是不会去指定nousb的吧。如果你真的指定了nousb,那它就只会幽怨的说一句“USBsupportdisabled”,然后退出usb_init。
nousb在drivers/usb/core/usb.c文件中定义为:
staticintnousb;/*DisableUSBwhenbuiltintokernelimage*/
module_param_named(autosuspend,usb_autosuspend_delay,int,0644);
MODULE_PARM_DESC(autosuspend,"defaultautosuspenddelay");
从中可知nousb是个模块参数。关于模块参数,我们都知道可以在加载模块的时候可以指定,但是如何在内核启动的时候指定?
打开系统的grub文件,然后找到kernel行,比如:
kernel/boot/vmlinuz-2.6.18-kdbroot=/dev/sda1rosplash=silentvga=0x314
其中的root,splash,vga等都表示内核参数。当某一模块被编译进内核的时候,它的模块参数便需要在kernel行来指定,格式为“模块名.参数=值”,比如:
modprobeusbcoreautosuspend=2
对应到kernel行,即为:
usbcore.autosuspend=2
通过命令“modinfo-p${modulename}”可以得知一个模块有哪些参数可以使用。同时,对于已经加载到内核里的模块,它们的模块参数会列举在/sys/module/${modulename}/parameters/目录下面,可以使用“echo-n${value}>/sys/module/${modulename}/parameters/${parm}”这样的命令去修改。