MINI2440 kernel starting
来源:互联网 发布:机器人虚拟仿真软件 编辑:程序博客网 时间:2024/06/05 00:57
#define pure_initcall(fn) __define_initcall("0",fn,0)
#define core_initcall(fn) __define_initcall("1",fn,1)
#define core_initcall_sync(fn) __define_initcall("1s",fn,1s)
#define postcore_initcall(fn) __define_initcall("2",fn,2)
#define postcore_initcall_sync(fn) __define_initcall("2s",fn,2s)
#define arch_initcall(fn) __define_initcall("3",fn,3)
#define arch_initcall_sync(fn) __define_initcall("3s",fn,3s)
#define subsys_initcall(fn) __define_initcall("4",fn,4)
#define subsys_initcall_sync(fn) __define_initcall("4s",fn,4s)
#define fs_initcall(fn) __define_initcall("5",fn,5)
#define fs_initcall_sync(fn) __define_initcall("5s",fn,5s)
#define rootfs_initcall(fn) __define_initcall("rootfs",fn,rootfs)
#define device_initcall(fn) __define_initcall("6",fn,6)
#define device_initcall_sync(fn) __define_initcall("6s",fn,6s)
#define late_initcall(fn) __define_initcall("7",fn,7)
#define late_initcall_sync(fn) __define_initcall("7s",fn,7s)
#define INITCALLS \
*(.initcallearly.init)\
VMLINUX_SYMBOL(__early_initcall_end) = .;\
*(.initcall0.init)\
*(.initcall0s.init)\
*(.initcall1.init)\
*(.initcall1s.init)\
*(.initcall2.init)\
*(.initcall2s.init)\
*(.initcall3.init)\
*(.initcall3s.init)\
*(.initcall4.init)\
*(.initcall4s.init)\
*(.initcall5.init)\
*(.initcall5s.init)\
*(.initcallrootfs.init)\
*(.initcall6.init)\
*(.initcall6s.init)\
*(.initcall7.init)\
*(.initcall7s.init)
./arch/arm/kernel/vmlinux.lds.S{
__tagtable_begin = .;
*(.taglist.init)
__tagtable_end = .;
. = ALIGN(16);
__setup_start = .;
*(.init.setup)
__setup_end = .;
__early_begin = .;
*(.early_param.init)
__early_end = .;
__initcall_start = .;
INITCALLS
__initcall_end = .;
__con_initcall_start = .;
*(.con_initcall.init)
__con_initcall_end = .;
__security_initcall_start = .;
*(.security_initcall.init)
__security_initcall_end = .;
}
kernel->init->mian.c
asmlinkage void __init start_kernel(void)
{
setup_arch(&command_line);->parse_tags(tags);->parse_tag(t);-> for (t = &__tagtable_begin; t < &__tagtable_end; t++)
setup_arch(&command_line);->parse_cmdline(cmdline_p, from);->for (p = &__early_begin; p < &__early_end; p++)
parse_early_param();->parse_early_options(tmp_cmdline);->do_early_param->for (p = __setup_start; p < __setup_end; p++)
console_init();-> call = __con_initcall_start;while (call < __con_initcall_end)
rest_init();-
} |
->kernel_thread(kernel_init, NULL, CLONE_FS | CLONE_SIGHAND);
static int __init kernel_init(void * unused)
{
do_basic_setup();->do_initcalls();->for (call = __early_initcall_end; call < __initcall_end; call++)
}
#define core_initcall(fn) __define_initcall("1",fn,1)
#define core_initcall_sync(fn) __define_initcall("1s",fn,1s)
#define postcore_initcall(fn) __define_initcall("2",fn,2)
#define postcore_initcall_sync(fn) __define_initcall("2s",fn,2s)
#define arch_initcall(fn) __define_initcall("3",fn,3)
#define arch_initcall_sync(fn) __define_initcall("3s",fn,3s)
#define subsys_initcall(fn) __define_initcall("4",fn,4)
#define subsys_initcall_sync(fn) __define_initcall("4s",fn,4s)
#define fs_initcall(fn) __define_initcall("5",fn,5)
#define fs_initcall_sync(fn) __define_initcall("5s",fn,5s)
#define rootfs_initcall(fn) __define_initcall("rootfs",fn,rootfs)
#define device_initcall(fn) __define_initcall("6",fn,6)
#define device_initcall_sync(fn) __define_initcall("6s",fn,6s)
#define late_initcall(fn) __define_initcall("7",fn,7)
#define late_initcall_sync(fn) __define_initcall("7s",fn,7s)
#define INITCALLS \
*(.initcallearly.init)\
VMLINUX_SYMBOL(__early_initcall_end) = .;\
*(.initcall0.init)\
*(.initcall0s.init)\
*(.initcall1.init)\
*(.initcall1s.init)\
*(.initcall2.init)\
*(.initcall2s.init)\
*(.initcall3.init)\
*(.initcall3s.init)\
*(.initcall4.init)\
*(.initcall4s.init)\
*(.initcall5.init)\
*(.initcall5s.init)\
*(.initcallrootfs.init)\
*(.initcall6.init)\
*(.initcall6s.init)\
*(.initcall7.init)\
*(.initcall7s.init)
./arch/arm/kernel/vmlinux.lds.S{
__tagtable_begin = .;
*(.taglist.init)
__tagtable_end = .;
. = ALIGN(16);
__setup_start = .;
*(.init.setup)
__setup_end = .;
__early_begin = .;
*(.early_param.init)
__early_end = .;
__initcall_start = .;
INITCALLS
__initcall_end = .;
__con_initcall_start = .;
*(.con_initcall.init)
__con_initcall_end = .;
__security_initcall_start = .;
*(.security_initcall.init)
__security_initcall_end = .;
}
kernel->init->mian.c
asmlinkage void __init start_kernel(void)
{
setup_arch(&command_line);->parse_tags(tags);->parse_tag(t);-> for (t = &__tagtable_begin; t < &__tagtable_end; t++)
setup_arch(&command_line);->parse_cmdline(cmdline_p, from);->for (p = &__early_begin; p < &__early_end; p++)
parse_early_param();->parse_early_options(tmp_cmdline);->do_early_param->for (p = __setup_start; p < __setup_end; p++)
console_init();-> call = __con_initcall_start;while (call < __con_initcall_end)
rest_init();-
} |
->kernel_thread(kernel_init, NULL, CLONE_FS | CLONE_SIGHAND);
static int __init kernel_init(void * unused)
{
do_basic_setup();->do_initcalls();->for (call = __early_initcall_end; call < __initcall_end; call++)
}
0 0
- MINI2440 kernel starting
- kernel停在Starting kernel 分析
- 启动出现错误:Starting kernel ...
- kernel starting 内核引导失败常见解决办法
- kernel starting 内核引导失败常见解决办法
- "Starting kernel ..." Lock Up (基于freescale)
- OK6410 Starting kernel ... undefined instruction pc : [<50008004>]
- kernel starting 内核引导失败常见解决办法
- Linux 启动卡在Starting kernel ...
- 卡在Starting kernel...的原因分析
- Zynq 停止在starting kernel……
- [IMX6Q][Android5.1]移植笔记 --- kernel停在Starting kernel 分析
- mini2440系统移植篇之kernel配置
- mini2440系统移植篇之kernel编译
- mini2440系统移植篇之kernel链接
- Linux 内核 Starting kernel ... 串口无输出问题归纳总结
- Linux 内核 Starting kernel ... 串口无输出问题归纳总结
- 烧写uImage的问题 : Starting kernel ... data abort
- 数据结构和算法经典100题-第13题
- ELMAH——可插拔错误日志工具
- 解决mysql 1040错误Too many connections的方法
- 预测游戏开发人才的未来趋势
- js与json交互理论和示例
- MINI2440 kernel starting
- PRML-系列一之1.2.2~1.2.3
- Linux中IO多路复用技术之select(),epoll
- github使用小结--本地建库并同步到github
- uva 1493(并查集)
- MD5加密与网络数据安全
- SELinux的功能熟悉
- U盘+GRUB2引导PE或linux镜像
- 第68题 Single Number II