重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
昨天在写关于linux设置脚本开机启动的文章时,有个疑问就是开机时怎么确认运行级别,然后遍历执行/etc/rcN.d/目录下的所有服务程序。带着疑问, 在前人的基础上 学习总结一下linux系统初始化的工作的内容,现在树莓派4B上展示出来。
创新互联是一家专注于成都做网站、成都网站建设与策划设计,城口网站建设哪家好?创新互联做网站,专注于网站建设10余年,网设计领域的专业建站公司;建站业务涵盖:城口等地区。城口做网站价格咨询:13518219792
1、加载内核
当计算机打开电源后,首先是BIOS开机自检,按照BIOS中设置的启动设备(通常是硬盘)来启动。操作系统接管硬件以后,首先读入 /boot 目录下的内核文件。树莓派4B的内核是Raspbian GNU/Linux 10 (buster),基于Debian。
2、初始化进程init
内核文件加载以后,运行第一个程序init,它的作用是初始化系统环境。init位于目录/sbin,进程号PID为1,即1号进程,其他所有进程都由init衍生,是init的子进程。
同时还有个0号进程,idle进程,在系统初始化时由内核kernel自身从无到有创建,通过调用kernel_thread创建一个内核线程去执行init函数,0号进程创建1号进程。
3、运行级别
具体介绍请参考笔者的文章-Linux运行级别简介 ,但是开机时是怎么确定运行级别的呢?
init进程首先读取文件 /etc/inittab,它是运行级别的设置文件。但是各个发行版不太一样,init的配置文件也不一样,有可能使用/etc/event.d里面的配置文件,最新版的改用为/etc/init目录。
4、开机启动程序
具体详情请参考文章-linux中/etc/init.d设置开机启动 ,确定运行级别后,执行rcN.d目录下的文件,这些链接文件是连接到init.d目录下的程序。init进程逐一加载开机启动程序,其实就是运行这个目录里的启动脚本。
比如运行级别为5(图形化多用户)时启动的程序:
5、用户登录
开机启动程序加载完毕以后用户登录。用户的登录方式有三种:
命令行登录:init进程调用getty程序。
ssh登录:init进程调用sshd程序。
图形界面登录:init进程调用显示管理器,Gnome图形界面对应的显示管理器为gdm。
6 、login shell
默认shell时bash,命令行界面,让用户可以直接与操作系统对话。读取环境变量,具体请参考笔者文章-Linux环境变量的设置。
最近研究命令行下,远程唤醒(Wake On LAN)家里的windows台式机。
linux下可以用 etherwake 这个软件,发送魔术封包(Magic Packet)远程唤醒机器。
我用的是树莓派,记录一下远程唤醒的方法。
首先安装 etherwake (基于Debian / Ubuntu )
安装完成后,可以用下面的命令远程唤醒
或者(下面两个命令我没有亲自尝试过)
比如你的MAC地址是 AA:BB:CC:DD:EE:FF ,就可以用
发送魔术封包唤醒远程机器。
其实还有其他一些细节,以后有机会慢慢补充吧。
参考文章:
[1] HowTo: Wake Up Computers Using Linux Command [ Wake-on-LAN ( WOL ) ]
无论是Linux还是Python,其学习过程对于硬件都没什么要求,对于知识的掌握才是核心。
理论上用树莓派学习当然可以,但是鉴于你依然处于初学者水平,特别是Linux相关的不够熟练,还是不太建议你是用树莓派来进行学习。
如你所见,树莓派是一个很需要DIY能力的“玩具”,非常酷炫,但对于入门学习几乎没有什么帮助——特别是对于Python,即使Windows环境也完全不会影响你的学习。
请记住:在未入门之前,应该尽力去降低自己的学习难度,而不是为了好玩或者其他原因,来凭空给自己的学习道路增加许多麻烦。