跳到主要内容

系统配置

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,扩展名并不影响脚本执行。

  1. 创建脚本,在luckfox.sh 中输入代码:

    #!/bin/sh
    echo "Hello Luckfox !"
    • 第 1 行的#!是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell;后面的 /bin/sh 就是指明了解释器的具体位置
    • 第 2 行的 echo 命令用于向标准输出文件(Standard Output,stdout,一般就是指显示器)输出文本。在.sh文件中使用命令与在终端直接输入命令的效果是一样的
  2. 为脚本增加可执行权限并执行。

    # vi test.sh
    # chmod 775 test.sh
    # ./test.sh
    Hello Luckfox !

3. 自启动设置

3.1 Buildroot环境

在 /etc/init.d/ 中有相关的系统脚本。系统开机后,会先执行 rcS,在这个脚本里面,会循环去执行S开头脚本的start分支。系统关机时,会先执行 rcK,在这个脚本里面,也是循环去执行S开头的脚本的stop分支。所以如果我们需要添加一个脚本在开机时执行,可以按以下步骤操作:

  1. 需要在 /etc/init.d/ 目录里新建一个 S??* 的脚本。

    • S:表示以S开头
    • ??:表示中间是两个字符串,建议加两个数字表示优先级,数字越小开机时越先执行,关机时越后执行
    • *:表示加任意字符串,用来描述脚本的功能
  2. 并且在脚本里实现 start 和 stop 分支。

  3. 给脚本添加权限,可以执行:

    chmod 775 脚本名
    #!/bin/sh

    case $1 in
    start)
    echo "start"
    ;;
    stop)
    echo "stop"
    ;;
    *)
    exit 1
    ;;
    esac
  4. 提高系统自带的脚本优先级。

    mv S99usb0config S90usb0config 
    mv S99_auto_reboot S90_auto_reboot
  5. 例如,要设置静态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 地址发生冲突
  1. 创建服务文件。

    sudo nano /etc/systemd/system/static-ip.service
  2. 添加服务内容。

    [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
  3. 创建脚本文件。

    sudo nano /usr/local/bin/set-static-ip.sh
  4. 添加脚本内容。

    #!/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
  5. 设置可执行权限。

    sudo chmod +x /usr/local/bin/set-static-ip.sh
  6. 重新加载 systemd。

    sudo systemctl daemon-reload
  7. 启用服务。

    sudo systemctl enable static-ip.service
  8. 测试服务。

    sudo systemctl start static-ip.service
  9. 查看状态。

    sudo systemctl status static-ip.service
  10. 重启后,测试网络。

    sudo reboot
    ping www.baidu.com