linux启动时对编译进内核驱动模块的加载 - wilson的日志 - 网易博客

来源:百度文库 编辑:神马文学网 时间:2024/03/29 13:25:49

linux启动时对编译进内核驱动模块的加载

linux kernel 2009-10-26 09:59:09 阅读129 评论0   字号:大小 订阅


文章来源:http://gliethttp.cublog.cn
[init/main.c]start_kernel()->rest_init()->kernel_thread创建核心线程init()->do_basic_setup()->do_initcalls()
static void __init do_initcalls(void)
{
    initcall_t *call;
    call = &__initcall_start;
    do {
        (*call)();
        call++;
    } while (call  &__initcall_end);
    /* Make sure there is no pending stuff from the initcall sequence */
    flush_scheduled_tasks();
}
vmlinux-armv.lds.in中对__initcall_start的定义
...
    __initcall_start = .;
    *(.initcall.init)
    __initcall_end = .;
...
/include/linux/init.h中对.initcall.init和initcall_t定义
typedef int (*initcall_t)(void);
#define __init_call __attribute__ ((unused,__section__ (".initcall.init ")))
#define module_init(x)    __initcall(x);
在dirvers/at91/net/at91_ether.c中
module_init(at91ether_init)
所以可以看出at91ether_init初始化函数指针将会被连接到.initcall.init空间,因此(*call)();系统启动时核心线程Init将直接调用
at91ether_init()完成网络硬件初始化;对于insmod加载的驱动,所有工作由insmod独立解析完成,insmod系统调用原型为sys_init_module
将rtl8019驱动编译进linux内核
1>驱动代码:rtl8019.c
2>在net目录下的config.in文件中添加一项
     dep_tristate ' RTL8019 support' CONFIG_RTL8019 $CONFIG_ISA
3>make menuconfig
  将RTL8019 support选择'y',保存退出,autoconf文件中出现一个宏定义:#define CONFIG_RTL8019
4>向net目录下的makefile,添加:
     obj-$(CONFIG_RTL8019) += rtl8019.o
5>编译内核,即将rtl8019添加到了linux内核
注:在menuconfig中选择m和y的区别:
y:模块驱动编译到内核中,启动时自动加载
m:模块会被编译,但是不会被编译到内核中,只是生成.o文件,我们可以收集这些.o文件做到linux的文件系统,如:ramdisk中,然后用modprobe或insmod实现动态加载.
linux启动时对编译进内核驱动模块的加载 - wilson的日志 - 网易博客 Linux 系统内核空间与用户空间通信的实现与分析 - wilson的日志 - 网易博客 转载--Linux 可加载内核模块剖析 - linux内核 - 开源linux.巨人的脚步... 2.4/2.6版Linux内核可装载模块的不同对设备驱动的影响 一个最简单的Linux 2.6内核驱动模块 从2.4 到2.6:Linux 内核可装载模块机制的改变对设备驱动的影响 从 2.4 到 2.6:Linux 内核可装载模块机制的改变对设备驱动的影响 从 2.4 到 2.6:Linux 内核可装载模块机制的改变对设备驱动的影响 - ChinaUnix.net MACHINE_START宏(内核启动相关) - 东海的日志 - 网易博客 Linux 可加载内核模块剖析 Linux 可加载内核模块剖析 Linux 可加载内核模块剖析 2.6下的内核模块编译-Linux -华夏名网资讯中心 虚拟主机,域名注册,双线虚拟主机,... linux内核的一些预定义 - linux内核与驱动 problems from dma_alloc_coherent - wilson的日志 - 网易博客 【转】Linux那些事儿之我是Sysfs(6)文件系统 - wilson的日志 - 网易博... Linux驱动学习记录 devfs_mk_cdev - unbutun的专栏 - CSDN博客 - 追逐梦想的日志 - 网易博客 详细讲解:编译Linux操作系统内核的步骤 编译内核的步骤 - 中国Linux公社 - Powered by SupeSite RTC 实时时钟驱动 - Linux内核之我的天下 - CSDN博客3 Linux加载网卡驱动 Linux编译内核 Linux 内核编译详解 Re: 关于Linux下高版本内核编译低版本内核的问题