subsys_initcall宏定义的一个例子,acpi/bus.c里面。
来源:互联网 发布:卡密社区系统源码 编辑:程序博客网 时间:2024/05/16 14:05
{
int result;
if (acpi_disabled) {
printk(KERN_INFO PREFIX "Interpreter disabled.\n");
return -ENODEV;
}
acpi_kobj = kobject_create_and_add("acpi", firmware_kobj);
if (!acpi_kobj) {
printk(KERN_WARNING "%s: kset create error\n", __func__);
acpi_kobj = NULL;
}
init_acpi_device_notify();
result = acpi_bus_init();
if (result) {
disable_acpi();
return result;
}
pci_mmcfg_late_init();
acpi_scan_init();
acpi_ec_init();
acpi_debugfs_init();
acpi_sleep_proc_init();
acpi_wakeup_device_init();
return 0;
}
subsys_initcall(acpi_init);
init/initimgfs.c里面又一个例子
static int __init populate_rootfs(void)
{
char *err = unpack_to_rootfs(__initramfs_start, __initramfs_size);
pr_err("in populate_rootfs \n");
if (err)
panic(err); /* Failed to decompress INTERNAL initramfs */
if (initrd_start) {
#ifdef CONFIG_BLK_DEV_RAM
int fd;
pr_err("Trying to unpack rootfs image as initramfs... \n");
pr_err("initrd_start = %x initrd_end = %x \n",(char *)initrd_start,(char *)initrd_end);
printk(KERN_INFO "Trying to unpack rootfs image as initramfs...\n");
err = unpack_to_rootfs((char *)initrd_start,
initrd_end - initrd_start);
if (!err) {
free_initrd();
goto done;
} else {
clean_rootfs();
unpack_to_rootfs(__initramfs_start, __initramfs_size);
}
printk(KERN_INFO "rootfs image is not initramfs (%s)"
"; looks like an initrd\n", err);
fd = sys_open("/initrd.image",
O_WRONLY|O_CREAT, 0700);
if (fd >= 0) {
sys_write(fd, (char *)initrd_start,
initrd_end - initrd_start);
sys_close(fd);
free_initrd();
}
done:
#else
printk(KERN_INFO "Unpacking initramfs...\n");
err = unpack_to_rootfs((char *)initrd_start,
initrd_end - initrd_start);
if (err)
printk(KERN_EMERG "Initramfs unpacking failed: %s\n", err);
free_initrd();
#endif
/*
* Try loading default modules from initramfs. This gives
* us a chance to load before device_initcalls.
*/
pr_err("before load_default_modules\n");
load_default_modules();
}
return 0;
}
rootfs_initcall(populate_rootfs);
include/linux/init.h里面有定义:
#define __define_initcall(fn, id) \
static initcall_t __initcall_##fn##id __used \
__attribute__((__section__(".initcall" #id ".init"))) = fn
...
#define pure_initcall(fn) __define_initcall(fn, 0)
#define core_initcall(fn) __define_initcall(fn, 1)
#define core_initcall_sync(fn) __define_initcall(fn, 1s)
#define postcore_initcall(fn) __define_initcall(fn, 2)
#define postcore_initcall_sync(fn) __define_initcall(fn, 2s)
#define arch_initcall(fn) __define_initcall(fn, 3)
#define arch_initcall_sync(fn) __define_initcall(fn, 3s)
#define subsys_initcall(fn) __define_initcall(fn, 4)
#define subsys_initcall_sync(fn) __define_initcall(fn, 4s)
#define fs_initcall(fn) __define_initcall(fn, 5)
#define fs_initcall_sync(fn) __define_initcall(fn, 5s)
#define rootfs_initcall(fn) __define_initcall(fn, rootfs)
#define device_initcall(fn) __define_initcall(fn, 6)
#define device_initcall_sync(fn) __define_initcall(fn, 6s)
#define late_initcall(fn) __define_initcall(fn, 7)
#define late_initcall_sync(fn) __define_initcall(fn, 7s)
- subsys_initcall宏定义的一个例子,acpi/bus.c里面。
- acpi bus 的scan
- c里面宏定义的一个很有用的符号#
- c语言里面的宏定义
- D-Bus学习(七):利用XML定义D-Bus之Client的例子
- D-Bus学习(八):利用XML定义D-Bus之Server的例子
- Quagga里面的宏定义
- 宏定义里面的#和##
- 格式化输出与宏定义的一个例子
- typedef用于函数定义的一个例子
- 一个简单的javascript类定义例子
- static成员定义的一个例子
- 一个重定义on_new_focus的例子
- 一个小小的C语言宏定义错误 - [C,C++]
- 神秘的subsys_initcall
- 神秘的subsys_initcall
- Windows Azure AppFabric 入门教学系列 (二):一个简单的Service Bus例子
- synflood.c 的一个例子
- PAT Advanced 1005
- VIM常用命令
- 【BZOJ 1030】 [JSOI2007]文本生成器
- hadoop权威指南,天气数据文件自动下载下载
- Interleaving String|leetcode题解
- subsys_initcall宏定义的一个例子,acpi/bus.c里面。
- 低功耗蓝牙4.0BLE编程-nrf51822开发(8)-GATT
- ZOJ Problem Set - 2417 Lowest Bit
- 《iOS极光推送步骤》
- JS鼠标事件(监听鼠标点击/释放,鼠标悬停/离开等)
- Unity API 笔记
- 内部类,匿名内部类
- Jocky for Eclipse
- 啊哈C——学习3.2一起来找茬