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