系统配置
1. shell 脚本
Shell 是一个应用程序,它提供了用户与操作系统内核之间的交互界面。通过shell,用户可以向操作系统发送命令,操作文件系统,运行程序,以及执行各种系统任务。Shell通常是一个命令行界面,用户可以在其中输入文本命令来执行各种任务。
常见的 Shell 有 sh、bash、csh、tcsh、ash 等。
sh(Bourne shell):sh是一种Unix和Linux操作系统中最常见的命令行解释器(shell)。它得名于其创建者Stephen Bourne,是最早的Unix shell之一。
Bash(Bourne-Again Shell):Bash是Unix和Linux系统中最常用的Shell。它是Bourne Shell的改进版本,提供了强大的脚本编程功能和丰富的命令行工具。
Dash:Dash是Debian Almquist Shell的缩写,通常用作系统初始化脚本的默认Shell。它在启动时非常快速,适用于系统引导和脚本任务。
Csh(C Shell)和Tcsh(Tenex C Shell):这些是C Shell的变种,主要在Unix系统中使用。它们具有与Bash不同的语法和功能。
Ash(Almquist Shell):Ash是另一种轻量级的Shell,通常用于嵌入式系统和一些轻量级Linux发行版。
2. 创建第一个脚本
打开文本编辑器,新建一个文本文件,并命名为 luckfox.sh,其中扩展名 sh 代表 shell,扩展名并不影响脚本执行。
创建脚本,在luckfox.sh 中输入代码:
#!/bin/sh
echo "Hello Luckfox !"- 第 1 行的
#!
是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell;后面的 /bin/sh 就是指明了解释器的具体位置 - 第 2 行的 echo 命令用于向标准输出文件(Standard Output,stdout,一般就是指显示器)输出文本。在
.sh
文件中使用命令与在终端直接输入命令的效果是一样的
- 第 1 行的
为脚本增加可执行权限并执行。
# vi test.sh
# chmod 775 test.sh
# ./test.sh
Hello Luckfox !
3. 自启动设置
3.1 Buildroot环境
在 /etc/init.d/ 中有相关的系统脚本。系统开机后,会先执行 rcS,在这个脚本里面,会循环去执行S开头脚本的start分支。系统关机时,会先执行 rcK,在这个脚本里面,也是循环去执行S开头的脚本的stop分支。所以如果我们需要添加一个脚本在开机时执行,可以按以下步骤操作:
需要在 /etc/init.d/ 目录里新建一个 S??* 的脚本。
- S:表示以S开头
- ??:表示中间是两个字符串,建议加两个数字表示优先级,数字越小开机时越先执行,关机时越后执行
- *:表示加任意字符串,用来描述脚本的功能
并且在脚本里实现 start 和 stop 分支。
给脚本添加权限,可以执行:
chmod 775 脚本名
#!/bin/sh
case $1 in
start)
echo "start"
;;
stop)
echo "stop"
;;
*)
exit 1
;;
esac提高系统自带的脚本优先级。
mv S99usb0config S90usb0config
mv S99_auto_reboot S90_auto_reboot例如,要设置静态IP地址,可以命名为 S99staticip(确保该命名在系统脚本之后)。
- 确保开发板已经接入路由器或者交换机,静态IP地址与路由器网段一致
- 不要和路由器分配出去的 IP 地址发生冲突
#!/bin/sh
MAX_TRIES=10
TRIES=0
check_ip_address() {
if ifconfig eth0 | grep -q "inet "; then
return 0
else
return 1
fi
}
static_ip()
{
while [ $TRIES -lt $MAX_TRIES ]; do
if check_ip_address; then
echo "DHCP succeed!"
ifconfig eth0 192.168.10.66 netmask 255.255.252.0
route add default gw 192.168.11.1
echo "nameserver 114.114.114.114" > /etc/resolv.conf
ifconfig eth0 up
break
else
echo "wait DHCP IP..."
TRIES=$((TRIES + 1))
sleep 5
fi
done
if [ $TRIES -eq $MAX_TRIES ]; then
echo "error"
fi
}
case $1 in
start)
echo "start"
static_ip
;;
stop)
echo "stop"
;;
*)
exit 1
;;
esac- 在 ifconfig eth0 192.168.10.66 netmask 255.255.252.0 语句中要替换成自己的 IP 地址和子网掩码。
- 对于命令 route add default gw 192.168.11.1,请将网关地址更改为您自己的配置。如果不确定,请使用相关命令如 route -n 查看。
3.2 Ubuntu 环境
在 Ubuntu 环境下可以使用systemd
创建一个服务,具体步骤:
- 确保开发板已经接入路由器或者交换机,静态IP地址与路由器网段一致
- 不要和路由器分配出去的 IP 地址发生冲突
创建服务文件。
sudo nano /etc/systemd/system/static-ip.service
添加服务内容。
[Unit]
Description=Set Static IP Address
After=network.target
[Service]
Type=oneshot
ExecStart=/usr/local/bin/set-static-ip.sh
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target创建脚本文件。
sudo nano /usr/local/bin/set-static-ip.sh
添加脚本内容。
#!/bin/bash
ifconfig eth0 192.168.10.66 netmask 255.255.252.0
ip link set eth0 up
route add default gw 192.168.11.1
echo "nameserver 114.114.114.114" > /etc/resolv.conf
ifconfig eth0 up设置可执行权限。
sudo chmod +x /usr/local/bin/set-static-ip.sh
重新加载 systemd。
sudo systemctl daemon-reload
启用服务。
sudo systemctl enable static-ip.service
测试服务。
sudo systemctl start static-ip.service
查看状态。
sudo systemctl status static-ip.service
重启后,测试网络。
sudo reboot
ping www.baidu.com