基于 ok6410-busybox 研究 busybox 启动

2024-05-27 16:08
文章标签 启动 研究 busybox ok6410

本文主要是介绍基于 ok6410-busybox 研究 busybox 启动,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

busybox 也支持 init 系统, 与 sysvinit 中提供的 init系统 不同
代码取自于 BusyBox v1.30.0.git (2020-10-20 16:11:07 CST)
  • busybox启动流程 - 从 log 的角度
Freeing unused kernel memory: 316K (c0835000 - c0884000) 
mount: mounting /dev/mmcblk0p1 on /boot failed: No such file or directory // init系统打印的第一句
/etc/init.d/rcS: line 13: can't create /proc/sys/kernel/hotplug: nonexistent directory
dm9000 dm9000.0 eth0: link down
IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
----------------------------------- welcome to A9 vexpress board
-----------------------------------Please press Enter to activate this console. IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
dm9000 dm9000.0 eth0: link up, 100Mbps, full-duplex, lpa 0x4DE1wit@vexpress:/ #
  • busybox 启动流程 - 从 过程 的角度
/etc/inittab,逐行解析并执行/etc/inittab中的命令(以当前的/etc/inittab为例)执行 /etc/init.d/rcS, rcS 为脚本文件,直接执行如果当前为 	 tty1,askfirst,键入回车后执行/bin/sh...如果当前为 ttySAC0,askfirst,键入回车后执行/bin/sh/etc/inittab 文件内容
-----------------------------------------------------
::sysinit:/etc/init.d/rcS
tty1::askfirst:-/bin/sh 
tty2::askfirst:-/bin/sh
tty3::askfirst:-/bin/sh
tty4::askfirst:-/bin/sh
tty5::askfirst:-/bin/sh
tty6::askfirst:-/bin/sh
tty7::askfirst:-/bin/sh
#::ctrlaltdel:/bin/umount -a -r#console::askfirst:-/bin/sh
ttySAC0::askfirst:-/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r/etc/init.d/rcS 文件内容
-----------------------------------------------------#! /bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
LD_LIBRARY_PATH=/lib
export PATH LD_LIBRARY_PATHmount -a
mkdir -p /dev/pts
mount -t devpts devpts /dev/pts
mdev -s
mkdir -p /var/lock# 2019-1-9 10:01:40 ...... ...... uevent_helper .....................
echo /sbin/mdev > /proc/sys/kernel/hotplugifconfig eth0  10.10.11.117 netmask 255.255.255.0  up
route add default gw 10.10.11.254echo "-----------------------------------"echo " welcome to ARM11 ok6410 board"echo "-----------------------------------"
busybox 中的 inittab 解析
id:runlevel_ignored:action:command
<id>:<runlevels>:<action>:<process> 
各字段的含义如下<id>:id字段与sysvinit的inittab中的含义不同,它代表的是这个语句中process执行所在的tty设备,内容就是/dev目录中tty设备的文件名。sysvinit的inittab要求每条语句id的值唯一,busybox的inittab不要求<runlevels>:busybox不支持runlevel,所以此字段完全被忽略,为空<action>:sysinit 	为init提供初始化命令脚本的路径respawn 	每当相应的进程终止执行时,重新启动该进程askfirst 	主要用途是减少系统上执行的终端应用程序的数量。它将会促使init在控制台上显示“Please press Enter to active this console”的信息,并在重新启动进程之前等待用户按下“enter”键wait 		告诉init必须等到相应的进程执行完成之后才能继续执行once 		仅执行相应的进程一次,而且不会等待它执行完成ctratldel 	当按下Ctrl+Alt+Delete组合键时,执行相应的进程shutdown 	当系统关机时,执行相应的进程restart 	当init重新启动时,执行相应的进程,通常此处所执行的进程就是init本身<process>:指定要运行的process的命令行。
sysvinit 与 busybox 异同
项目sysvinitbusybox
是否提供init进程
是否需要bootargs支持init=/linuxrc
启动项名称/sbin/init/linuxrc
来源代码sysvinit-2.86.tar.gzbusybox-1.30.0.tar.gz
解析文件/etc/inittab/etc/inittab
inittab语法A类似A,不同与A
是否支持run level
其他
  • tty2::askfirst:-/bin/sh 中的-是什么意思 ,参考login shell 与 non-login shell

符号"-" 表示 启动 /bin/sh 的时候 以 login shell 方式启动关于这里, login shell和non-login shell加载的一些配置文件是不一样的, 不同的shell也不一定.以bash为例, login shell加载的顺序是:/etc/profile
/etc/profile.d/*.sh (这一步其实是在上面的/etc/profile里source的)
~/.bash_profile
~/.bash_login
~/.profile
后三个是按顺序找到其中一个, 加载后就不再加载后续的.non-login shell加载顺序是:/etc/bash.bashrc
~/.bashrc详情请查阅 https://blog.tankywoo.com/2015/08/30/login-nonlogin-interactive-noninteractive-shell.html?utm_source=tuicool&utm_medium=referral
  • sysvinit 的 一般流程 和 busybox 有什么不同
busybox :1. 启动初始化脚本A2. 在对应的tty上启动 /bin/shsysvinit :1. 启动通用初始化脚本B2. 查看当前runlevel,根据runlevel启动对应的初始化脚本C3. 在对应的tty(例如tty1)上启动/sbin/agetty tty1 9600

这篇关于基于 ok6410-busybox 研究 busybox 启动的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1007952

相关文章

nginx启动命令和默认配置文件的使用

《nginx启动命令和默认配置文件的使用》:本文主要介绍nginx启动命令和默认配置文件的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录常见命令nginx.conf配置文件location匹配规则图片服务器总结常见命令# 默认配置文件启动./nginx

Nexus安装和启动的实现教程

《Nexus安装和启动的实现教程》:本文主要介绍Nexus安装和启动的实现教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、Nexus下载二、Nexus安装和启动三、关闭Nexus总结一、Nexus下载官方下载链接:DownloadWindows系统根

Java中实现线程的创建和启动的方法

《Java中实现线程的创建和启动的方法》在Java中,实现线程的创建和启动是两个不同但紧密相关的概念,理解为什么要启动线程(调用start()方法)而非直接调用run()方法,是掌握多线程编程的关键,... 目录1. 线程的生命周期2. start() vs run() 的本质区别3. 为什么必须通过 st

Oracle修改端口号之后无法启动的解决方案

《Oracle修改端口号之后无法启动的解决方案》Oracle数据库更改端口后出现监听器无法启动的问题确实较为常见,但并非必然发生,这一问题通常源于​​配置错误或环境冲突​​,而非端口修改本身,以下是系... 目录一、问题根源分析​​​二、保姆级解决方案​​​​步骤1:修正监听器配置文件 (listener.

MySQL版本问题导致项目无法启动问题的解决方案

《MySQL版本问题导致项目无法启动问题的解决方案》本文记录了一次因MySQL版本不一致导致项目启动失败的经历,详细解析了连接错误的原因,并提供了两种解决方案:调整连接字符串禁用SSL或统一MySQL... 目录本地项目启动报错报错原因:解决方案第一个:第二种:容器启动mysql的坑两种修改时区的方法:本地

MySQL启动报错:InnoDB表空间丢失问题及解决方法

《MySQL启动报错:InnoDB表空间丢失问题及解决方法》在启动MySQL时,遇到了InnoDB:Tablespace5975wasnotfound,该错误表明MySQL在启动过程中无法找到指定的s... 目录mysql 启动报错:InnoDB 表空间丢失问题及解决方法错误分析解决方案1. 启用 inno

无法启动此程序因为计算机丢失api-ms-win-core-path-l1-1-0.dll修复方案

《无法启动此程序因为计算机丢失api-ms-win-core-path-l1-1-0.dll修复方案》:本文主要介绍了无法启动此程序,详细内容请阅读本文,希望能对你有所帮助... 在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是"api-ms-win-core-path-l1-1-0.dll丢失

解决tomcat启动时报Junit相关错误java.lang.ClassNotFoundException: org.junit.Test问题

《解决tomcat启动时报Junit相关错误java.lang.ClassNotFoundException:org.junit.Test问题》:本文主要介绍解决tomcat启动时报Junit相... 目录tomcat启动时报Junit相关错误Java.lang.ClassNotFoundException

Redis在windows环境下如何启动

《Redis在windows环境下如何启动》:本文主要介绍Redis在windows环境下如何启动的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Redis在Windows环境下启动1.在redis的安装目录下2.输入·redis-server.exe

解决SpringBoot启动报错:Failed to load property source from location 'classpath:/application.yml'

《解决SpringBoot启动报错:Failedtoloadpropertysourcefromlocationclasspath:/application.yml问题》这篇文章主要介绍... 目录在启动SpringBoot项目时报如下错误原因可能是1.yml中语法错误2.yml文件格式是GBK总结在启动S