在一个驱动的启动脚本中加入对某个守护进程的判断,该如何写?

时间:2022-06-01 21:57:48

听说启动脚本中加入判断就可以了,就是让守护进程在驱动加载之后才启动,在驱动卸载之前先关闭(关机情况)?

8 个解决方案

#1


你的驱动是动态加载卸载还是在系统启动时加载,运行时不会动态卸载(可以手动卸载)?

举个例子,比如NIC的驱动,在系统boot的时候加载,在系统运行时,驱动模块一直保留在系统中,直到用户手动卸载它。

#2


驱动是字符设备驱动,通过设置rc*.d在启动时自动加载~~(我在驱动配置文件中还设置了ddi-forceattach, ddi-no-autodetach)

#3


如果守护进程按照传统方法也在rc*.d里添加并管理我可以看到它的启动顺序优先级,但是这个守护进程是通过
SMF添加管理的,怎么知道它的启动顺序讷?
听说可以脚本里面加入判断。。。

#4


哦, 你的Solaris通过SMF启动service,那你应该使用的Solaris 10吧?如果我没有记错的话,Solaris 10开始支持SMF的。

在Solaris 10下加载一个字符驱动不需要改动rc*.d。直接使用add_drv就行了,而且只要你提供足够的信息,add_drv会更改/etc下的配置文件,这样下次启动后可以正确的load到driver。

系统自动load driver是在启动第一个线程之前完成的,所以当SMF启动你的daemon的时候,你的driver肯定已经load好了,除非驱动程序load失败。你可以在SMF脚本里面简单的判断一下:

modinfo | grep xxx (your driver name)

#5


如果确实需要在rc*.d中加载驱动的话,SMF的milestone对应了rc*.d的启动level。

你可以到google上找找Solaris的administration文档,对应关系好像是:

single-user S
muti-user 2
milestone-muti 3
...

#6


明白~~

但是关机的顺序呢?系统在卸载驱动模块 之前一定会先 kill server 进程么?

#7


系统关机,首先会kill掉所有的线程(包括daemon, init线程除外)。所以你的daemon运行的时候,driver肯定是load的,除非load driver出现错误。

验证设计的最好的方法是测试。所以做完后做做各种情况下的测试。为了保证你的设计的健壮性,你也应该测试一下,如果driver被手动卸载掉会出现什么情况,好的处理方法是daemon报错,提示用户重新load driver,然后restart daemon。 不好的处理方法是,用户什么都不知道(silence quit)。

#8


好~
辛苦,可怜的hotsolaris貌似就尼一个人解答问题。。。

#1


你的驱动是动态加载卸载还是在系统启动时加载,运行时不会动态卸载(可以手动卸载)?

举个例子,比如NIC的驱动,在系统boot的时候加载,在系统运行时,驱动模块一直保留在系统中,直到用户手动卸载它。

#2


驱动是字符设备驱动,通过设置rc*.d在启动时自动加载~~(我在驱动配置文件中还设置了ddi-forceattach, ddi-no-autodetach)

#3


如果守护进程按照传统方法也在rc*.d里添加并管理我可以看到它的启动顺序优先级,但是这个守护进程是通过
SMF添加管理的,怎么知道它的启动顺序讷?
听说可以脚本里面加入判断。。。

#4


哦, 你的Solaris通过SMF启动service,那你应该使用的Solaris 10吧?如果我没有记错的话,Solaris 10开始支持SMF的。

在Solaris 10下加载一个字符驱动不需要改动rc*.d。直接使用add_drv就行了,而且只要你提供足够的信息,add_drv会更改/etc下的配置文件,这样下次启动后可以正确的load到driver。

系统自动load driver是在启动第一个线程之前完成的,所以当SMF启动你的daemon的时候,你的driver肯定已经load好了,除非驱动程序load失败。你可以在SMF脚本里面简单的判断一下:

modinfo | grep xxx (your driver name)

#5


如果确实需要在rc*.d中加载驱动的话,SMF的milestone对应了rc*.d的启动level。

你可以到google上找找Solaris的administration文档,对应关系好像是:

single-user S
muti-user 2
milestone-muti 3
...

#6


明白~~

但是关机的顺序呢?系统在卸载驱动模块 之前一定会先 kill server 进程么?

#7


系统关机,首先会kill掉所有的线程(包括daemon, init线程除外)。所以你的daemon运行的时候,driver肯定是load的,除非load driver出现错误。

验证设计的最好的方法是测试。所以做完后做做各种情况下的测试。为了保证你的设计的健壮性,你也应该测试一下,如果driver被手动卸载掉会出现什么情况,好的处理方法是daemon报错,提示用户重新load driver,然后restart daemon。 不好的处理方法是,用户什么都不知道(silence quit)。

#8


好~
辛苦,可怜的hotsolaris貌似就尼一个人解答问题。。。