HI3516DV300_21_根文件系统解析2


1. rcS分析

1.1源码分析

文件在这个地方

这个是常规的

这个mount -a呢,就是挂载我们的init_table里面的所有的

这也是常规的

然后,打印一个这个,这里,其实就是一个Hi罢了

一边分析这里,一边分析打印信息相关的

首先是在这里挂载上根文件系统的

这是把内核中没有用到的内存,给释放了

就是在驱动中,下划线__init的那些,init之后用不到了,所以就会被释放了

下面,立马就打印出来了这个标志符

这里导出来lib的路径,这里就是额外导出来了额外链接库,并且是用户的动态链接库,说明/usr/lib/里面放的就是用户的动态链接库

上面验证了一下,里面全部都是各种动态链接库,大部分动态链接库都是海思自己提供的

这里,其实是OpenSSL的相关的库文件

这样,就可以通过OpenSSL做加密的通信

在这里,做了一个循环

这里,是把/etc/init.d/S…相关的文件,作一个遍历

只要说它是存在的

那就执行它

如果属于ssh进程,那就在后台执行它

其实,也就是挨个,按顺序执行这里面的文件

但是,在创建的时候,会报错,为什么呢?

这是说这些节点已经存在了

一方面呢,可能在制作根文件系统的时候,我们已经静态地把这些文件创建起来了

另一方面呢,可能板子不是第一次启动的,因为第一次启动的时候,就已经创建了,后面再启动一次,又重新创建了一次

其实,在这里面添加一次判断就行了,判断如果本来就有这个东西,那么,我就不会去再次创建了

或者,如果发现本来就有这个东西,那我就把这个东西先删掉,然后再去创建1次

报了这个错,其实是一点都不影响的

现在,来分析一下udev文件

首先,是临时创建了一个设备文件/dev/pts

然后,把这个devpts,一个临时文件系统,挂载到/dev/pts路径下

然后,创建了udev

然后,在这里运行了udev的 –daemon

然后,把udev的trigger也运行起来了

这些东西呢,其实就是使能了udev

然后,来看这个文件:S41dhcpcd

这个,尤其是在核心课程一期的小项目里面讲过

wifi那里呢,就需要移植这个dhcpcd,就要去执行动态内存分配

其实在Linux的busybox里面,大部分也包含了这个dhcpcd

这个dhcpcd呢,也可以作为我们Linux系统里面的一个D,也就是Daemon

这个Daemon运行起来后呢?我们就可以去使用它来做dhcp,也就是自动分配ip地址

这里其实就是处理和这个有关的

这里最终呢,就是看start-stop-daemon,如果start了这个daemon,将来连接上Linux系统就能让我们来让它去dhcp去分配内存

这个dhcp一定要看清楚,谁是server,谁是client

server是给别人分配ip的,client呢,是去请求别人来给你分配ip的

所以,dhcp包含两部分,一部分是dhcpc,也就是clien;一部分是dhcpd,也就是daemon

下面,来看看S50sshd

也就是在我们这个系统里面,移植了sshd,也就是移植了ssh的daemon

所以,我们的这个开发板,它运行起来后,默认是把这个ssh的服务开启了的

而且,还配置了用户名和密码

那么,我们就可以通过ssh去远程登录这个开发板

默认ip地址是:192.168.1.120
ssh的用户名是:root
ssh的密码是:rpdzkj

相当于我们现在的server的ip是192.168.1.120

ssh登录的时候,首先,双方通信都是加密的

它怎么加密的呢?就是访问的主机和客户端这边要保存一个密钥,然后这边双向通信的时候,自动通过密钥来进行加解密,按道理来说,在服务器与客户端这边,都要做密钥的,所以,相当于现在pc这端是没有密钥的。

一次性接受:就是短时生成一个临时的密钥,来进行双反通信,双方通信完了之后呢,这个东西就不在了,下次连接的时候,还是会弹出这个

接受并保存:就是双方把生成的密钥保存到本地,下一次再连接的时候,就不会跳出这个东西了,直接就免密码了

来看下S80network这个文件

这个就是和网络有关的,这里定义了很多变量,也都是和网络有关的

/proc/cmdline其实就是通过bootargs传参的那个东西

现在就是在/proc/cmdline里面去遍历ipinfo,然后分别进行赋值

其实,是可以通过bootargs传参来指定ipaddr这些

但是,我们在bootargs传参的时候,根本就没有去管这些东西,也就是没有设置ipaddr,所以,在cat这些东西的时候,都是空的,ipinfo里面,一个东西都没有,所以,下面这个循环,一次都进不来,根本都没用。

所以,这些东西,在我们这里都没有设置

所以,如果ip地址是空的时候,直接就退出,根本就不会去管这些东西

在开机信息里面,dhcp是失败了,也就是说,也就是,在dhcp的时候,网络都还没有设置呢?

其实顺序是有点问题:按道理,应该先启动网络,然后再进行dhcp的

这是执行ssh用的

network在执行后,什么都没有出现

没有出现这些打印信息

后面如果没有获取到ip地址,再执行dhcp

所以,要使得S80 network起作用,那就得在bootargs里面传参

现在,上面的步骤已经执行完成了

后面,执行的所有内容,都在:sample.sh里面了

现在,来分析sample.sh这个文件

首先,创建了:/dev/shm这个文件夹(shared memory)

然后,执行了这个脚本

这里,居然还有一个调试脚本

这里,打印结束信息

这个就是:sample.sh所打印的相关信息

到这以后,rcs就相当于执行完了

busy要执行rcs的那边呢?busybox还要执行其它的东西,其中就有登录程序

默认用root登录
默认就不用登录用户名和密码

其实,ttys000就是ttyAMA0,也就是串口0

后面的,执行的文件,其实是在:/usr/script/hi3516dv300.sh


Author: Ruimin Huang
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint polocy. If reproduced, please indicate source Ruimin Huang !
  TOC