Busybox源码

Busybox-1.22.1


注意:头文件applet_tables.h是在编译时生成的,还有其他几个文件如autoconf.h/usage.h/...也是。


libbb/appletlib.c/main()

applet_name = argv[0]  // 命令name

run_applet_and_exit(applet_name, argv)

applet = find_applet_by_name(name)   // 根据名字找到index

run_applet_no_and_exit(applet, argv)

applet_main[applet_no](argc, argv)  // 根据index调用对应的函数


init命令 -- init_main()

init/init.c/init_main()

// 注册halt/reboot/poweroff信号处理

bb_signals(0+ (1 << SIGPWR)  /* halt */ + (1 << SIGUSR1) /* halt */+ (1 << SIGTERM) /* reboot */+ (1 << SIGUSR2) /* poweroff */, halt_reboot_pwoff)


poweroff命令 -- halt_main()

init/halt.c/halt_main()

signals[] = { SIGUSR1, SIGUSR2, SIGTERM }

kill(1, signals[which])  // 根据不同命令向1号进程发送不同信号

init/init.c/halt_reboot_pwoff()

run_shutdown_and_kill_processes()

pause_and_low_level_reboot()

reboot(magic)  //  系统调用reboot

kernel/sys.c/SYSCALL_DEFINE4(reboot)

kernel_power_off()


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值