嵌入式Linux网络体系结构设计与TCP/IP协议栈
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.4.2 自动装载模块

除了使用以上命令行工具外,内核模块可以在需要的时候自动装载到内核中。使用我们在前面介绍的工具装载模块和卸载模块需要用户的干预,而且出于安全原因只有根用户能使用insmod和rmmod来加载和卸载模块。虽然这样保证了安全,但却带来了不便。例如,当一个用户程序在运行过程中需要使用一个功能,但该功能的模块还没有加载到内核中,这就需要内核有能力自动调度模块到内核地址空间。

通常,在程序运行过程中如果需要的资源或某个设备驱动程序没有注册,内核会报错。你可以事先用内核函数request_模块申请需要的组件模块。为了使用这个函数,在配置内核时需要激活选项Kernel Module Loader。request_模块会调用modprobe命令自动装载需要的模块(并调度模块依赖的其他模块)。要自动调度哪些模块需要在配置文件/etc/模块s.conf中设置。

下面给出了/etc/模块s.conf配置文件的示例。在该文件中它指明当前网络设备是由模块mylan_cs代表的,为了装载该模块,需要给它传送特定的参数。如果modprobe不能找到模块,printk会给出错误信息。

    /etc/模块s.conf.
    #Aliases – specify your hardware
    alias eth0 mylan_cs
    options mylan_cs eht=1 network_name="MyNet" station_name="neo"

    alias char_major-4 serial
    alias char-major-5 serial
    alias char-major-6 lp
    alias char-major-9 st

    alias tty-ldisc-1  slip
    alias tty-ldisc-3  ppp

虽然这种方式可以自动装载模块,但它也只能调度系统管理员在配置文件中指定的模块。