树莓派Linux启动过程简介

树莓派Linux启动过程简介,第1张

    昨天在写关于linux设置脚本开机启动的文章时,有个疑问就是开机时怎么确认运行级别,然后遍历执行/etc/rcN.d/目录下的所有服务程序。带着疑问, 在前人的基础上 学习总结一下linux系统初始化的工作的内容,现在树莓派4B上展示出来。

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环境变量的设置。

Arch Linux 我对他的赞赏超过了Debian和之类的衍生版.Arch Linux也很邪教,这要得名于他的Arch WiKi.这很赞,因为你的大部分问题都可以在WiKi找到你要的答案,同样包括了Arch Linux arm 树莓派版的系统安装.

可以参考我的,完成你的树莓派系统的安装(只是翻译了官方的英文): 树莓派2 Arch Linux ARM 安装

安装环境也需要一个物理机的Linux系统,推荐Ubuntu(社区做的很不错特别在国内的论坛,大部分教学都是Ubuntu,相对的Debian很少出现,虽然兼容度极高).

文章内容的继续建立在你已经安装树莓派Arch的基础上,如果你没有安装下面的步骤不适合你参考.

为了满足朋友的要求,才有此文.

sudo 使一般用户不需要知道超级用户的密码即可获得权限。

去除下列行的#号

文章部分参考于网络,毕竟我的2b没有蓝牙和WIFI,为了确保文章的可用性,还是希望大家有什么错误指出来.

我的实验环境:

1.交叉编译工具链:gcc-linaro-arm-linux-gnueabihf-4.8-2014.04_linux(4.8.2).tar.xz

2.SDK文件:MarsBoard-A20-Linux-SDK-V1.1.tar.bz2

在安装gcc-arm-linux-gnueabi的时候,会自动安装上gcc-4.6-arm-linux-gnueabi,如下图所示:

第二个文件的安装很重要,尽管后面提示的编译错误,缺少的是arm-linux-...,但是安装这个文件还是挺好用的。

根据前面安装的一些安装包,其实本节的交叉编译工具链可以不用 *** 作。因为已经包含了本节所做的了。

我得先将vim改一下,否则按住上下左右,会出现A,B,C,D。

再/etc/profile最后一行添加内容:

然后:

这里做一些简要的说明,在网址: 链接 上有一些说明,从说明中,我们可以看到我们用的sdk的架构。

pack文件夹

选择2,server版本。

之后:

能找到的livesuit_marsboard_a20_debian.img就是生成的镜像文件。如果要修改名字,可以:

这里面就包含了image.cfg,找到里面的一项:

修改为其他的名字即可。

选择2,server版本。

1.若出现如下报错:

可以:

如果出现:

但是其实这些文件都是有的,可以不妨:

再次编译,则问题如下:

仔细找编译的shell输出文件,发现是rootfs/下的gz文件找不到,这是因为我做前面的 *** 作的时候,希望生成自己的rootfs_my.tar.gz文件。现在我重新将该文件放到rootfs/下,再次编译,我将最后的结果放在下面:

这样表示成功了。

下面列入生成的镜像:

livesuit_superpi3.img即是。

1.我在做上面的 *** 作的时候,夹杂的使用了两个开发板,一个是marsboard出品的a20开发板,另外一个是风火轮出品的a20树莓派3卡片电脑,说实在的,看起来风火轮附带板子资料挺多,但是其真正写的资料可没用心做,实在不是一个榜样,在该开发板上做非核心开发,是可以的,但是做研发,还是需要做考量。

烧写成功后,打印的内容如下,作为日志信息,留作以后分析:


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8360847.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-15
下一篇 2023-04-15

发表评论

登录后才能评论

评论列表(0条)

保存