[9构建嵌入式linux系统项目-启动脚本的编写
启动脚本 教学回顾 shell语法 管道、重定向 变量 结构性语句 教学内容 启动脚本的写法 教学要求 熟悉掌握启动脚本的写法 shell 函数 在shell程序中, 常常把完成固定功能、且多次使用的一组命令(语句)封装在一个函数里,每当要使用该功能时只需调用该函数名即可。 函数在调用前必须先定义,即在顺序上函数说明必须放在调用程序的前面。 调用程序可传递参数给函数, 函数可用return语句把运行结果返回给调用程序。 函数只在当前shell中起作用, 不能输出到子Shell中。 函数定义格式: 函数变量作用域 全局作用域:在脚本的其他任何地方都能够访问该变量。 局部作用域:只能在声明变量的作用域内访问。 声明局部变量的格式: local variable_name =value 函数变量作用域 #! /bin/bash # echo "lclavariable in function1 = $lclvariable" echo "Gblvariable in function1 = $Gblvariable" scope() { local lclvariable=1 Gblvariable=2 echo "lclavariable in function2 = $lclvariable" echo "Gblvariable in function2 = $Gblvariable" } scope echo "lclavariable in function3 = $lclvariable" echo "Gblvariable in function3 = $Gblvariable" 启动脚本 设计启动脚本 内核挂载根文件系统后,执行第一个用户程序(/sbin/init),init进程就是1号进程,是所有其他进程的祖先进程。 init进程根据/etc下的配置文件(inittab等)来启动其他进程,初始化系统。 在嵌入式中,配置文件是要自己编写的。 inittab init进程读取/etc/inittab文件: rcS /etc/init.d/rcS是init进程启动的第一个脚本程序,也叫做系统初始化脚本,该脚本主要完成以下任务: 挂载其他文件系统 启动mdev程序来管理设备文件 配置网络等 下面给出一个比较好的rcS脚本写法: fstab /bin/mount -a 的意思是挂载文件/etc/fstab中设置的所有设备 mdev mdev是busybox下的udev的精简版,适合在嵌入式系统下管理设备 mdev 有两个主要的应用 系统启动时创建设备文件 动态生成设备文件 mdev 系统初始化脚本中一个完整的使用mdev 的代码片段 配置网络脚本 我们将配置网卡eth0的脚本放在/etc/init.d/start/目录下,文件名为network。 该脚本如下: profile init程序通过启动/etc/init.d/rcS脚本程序来进行一系列的初始化工作 然后启动一个shell(/bin/sh)。 启动/bin/sh程序时,sh程序会读取/etc/profile作为shell的环境变量配置文件 启动脚本编写好后,启动的信息如下: 用户登陆 在上面的inittab文件中,init启动的最后任务是启动定一个shell(/bin/sh)。 我们可以将其改成最后一个启动的是一个登陆程序。 bash getty会启动login启动进行登陆 当登陆成功会启动/bin/bash程序 bash是gun的一个软件,也是我们常用的命令行shell,代码可以在上下载。 从虚拟机中,拷贝登陆root所需要的相关文件拷贝到根文件系统中 $ sudo cp /etc/{group,gshadow,passwd,shadow} /home/sice/rootfs/etc 开发板启动信息如下: 课堂小结 思考题 作业题 * func2.sh Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile . Copyright 2004-2011 Aspose Pty Ltd. Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile . Copyright 2004-2011 Aspose Pty Ltd. Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile . Copyright 2004-2