模塊建立之后, 下一步是加載到內核. 如我們已指出的, insmod 為你完成這個工作. 這個 程序加載模塊的代碼段和數據段到內核, 接着, 執行一個類似 ld 的函數, 它連接模塊中 任何未解決的符號連接到內核的符號表上. 但是不象連接器, 內核不修改模塊的磁盤文件, 而是內存內的拷貝. insmod 接收許多命令行選項(詳情見 manpage), 它能夠安排值給你模 塊中的參數, 在連接到當前內核之前. 因此, 如果一個模塊正確設計了, 它能夠在加載時 配置; 加載時配置比編譯時配置給了用戶更多的靈活性, 有時仍然在用. 加載時配置在本 章后面的 "模塊參數" 一節講解.
感興趣的讀者可能想看看內核如何支持 insmod: 它依賴一個在 kernel/module.c 中定義 的系統調用. 函數 sys_init_module 分配內核內存來存放模塊 ( 這個內存用 vmalloc 分 配; 看第 8 章的 "vmalloc 和其友" ); 它接着拷貝模塊的代碼段到這塊內存區, 借助內 核符號表解決模塊中的內核引用, 並且調用模塊的初始化函數來啟動所有東西.
如果你真正看了內核代碼, 你會發現系統調用的名子以 sys_ 為前綴. 這對所有系統調用 都是成立的, 並且沒有別的函數. 記住這個有助於在源碼中查找系統調用.
modprobe 工具值得快速提及一下. modprobe, 如同 insmod, 加載一個模塊到內核. 它的 不同在於它會查看要加載的模塊, 看是否它引用了當前內核沒有定義的符號. 如果發現有, modprobe 在定義相關符號的當前模塊搜索路徑中尋找其他模塊. 當 modprobe 找到這些模 塊( 要加載模塊需要的 ), 它也把它們加載到內核. 如果你在這種情況下代替以使用 insmod , 命令會失敗, 在系統日志文件中留下一條 " unresolved symbols "消息.
如前面提到, 模塊可以用 rmmod 工具從內核去除. 注意, 如果內核認為模塊還在用( 就是 說, 一個程序仍然有一個打開文件對應模塊輸出的設備 ), 或者內核被配置成不允許模塊 去除, 模塊去除會失敗. 可以配置內核允許"強行"去除模塊, 甚至在它們看來是忙的. 如 果你到了需要這選項的地步, 但是, 事情可能已經錯的太嚴重以至於最好的動作就是重啟 了.
lsmod 程序生成一個內核中當前加載的模塊的列表. 一些其他信息, 例如使用了一個特定 模塊的其他模塊, 也提供了. lsmod 通過讀取 /proc/modules 虛擬文件工作. 當前加載的 模塊的信息也可在位於 /sys/module 的 sysfs 虛擬文件系統找到.