Tạo và kiểm soát các tập lệnh khởi động trong BusyBox


11

Tôi đã biên dịch kernel linux tùy chỉnh trong BusyBox. BusyBox initkhông hỗ trợ runlevels. Khi kernel khởi động trong BusyBox, đầu tiên nó sẽ thực thi inittìm kiếm runlevel được chỉ định trong /etc/inittab. BusyBox inithoạt động tốt mà không có /etc/inittab. Khi không inittabtìm thấy nó có hành vi sau:

::sysinit:/etc/init.d/rcS

Phần này rất rõ ràng đối với tôi, nhưng tôi muốn biết cách quản lý trình nền khởi động mạng, tạo cổng nối tiếp hoặc bắt đầu javaquá trình. Tôi đã xem các kịch bản cư trú /etc/init.d/nhưng tôi không hiểu cách quản lý chúng. Tôi đang tìm kiếm một hướng dẫn hoặc giải pháp tốt để tự kiểm soát các dịch vụ này mà không cần một công cụ tự động như thế nào buildroot. Tôi muốn hiểu làm thế nào các tập lệnh này hoạt động và làm thế nào để tạo ra các thiết bị /dev/(ngay bây giờ tôi chỉ có consolettyAM0).

Câu trả lời:


9

Đối với buildroot, tất cả các tập lệnh của bạn phải được đặt $path_to_buildroot/output/target/etc/init.dtrước khi xây dựng hình ảnh. Trong trường hợp của tôi, thư mục này chứa rcSvà một vài tập lệnh có tên S [0-99] script_name. Vì vậy, bạn có thể tạo tập lệnh bắt đầu \ stop của riêng bạn.

RCS:

#!/bin/sh

# Start all init scripts in /etc/init.d
# executing them in numerical order.
#
for i in /etc/init.d/S??* ;do

     # Ignore dangling symlinks (if any).
     [ ! -f "$i" ] && continue

     case "$i" in
    *.sh)
        # Source shell script for speed.
        (
        trap - INT QUIT TSTP
        set start
        . $i
        )
        ;;
    *)
        # No sh extension, so fork subprocess.
        $i start
        ;;
    esac
done

và ví dụ S40network:

#!/bin/sh
#
# Start the network....
#

case "$1" in
  start)
    echo "Starting network..."
    /sbin/ifup -a
    ;;
  stop)
    echo -n "Stopping network..."
    /sbin/ifdown -a
    ;;
  restart|reload)
    "$0" stop
    "$0" start
    ;;
  *)
    echo $"Usage: $0 {start|stop|restart}"
    exit 1
esac

exit $?

S[0-99]script_namecú pháp tên tệp sẽ chạy S10*trước S2*và phá vỡ tập lệnh.
Tim

@Tim không nhất thiết phải "phá vỡ tập lệnh", chỉ là zero-pad. Chắc chắn S20*chạy sau S10*, nếu bạn muốn một cái gì đó đến trước khi S10bạn cần phải gọi nó S01*, S02*vv NBD.
thom_nic

5

Bạn nên thay đổi fs trong thư mục "đích". Điều này là do những thay đổi trong output/target/không tồn tại make cleanlệnh.

Trong hướng dẫn xây dựng đã giải mã làm thế nào để làm điều đó một cách chính xác

Bạn nên tạo dir ở đâu đó mà một phần hệ thống tập tin lớp phủ. Ví dụ: bạn có thể tạo dir "your-overlay" trong buildroot dir nơi bạn tạo cấu trúc này

your-overlay/etc/init.d/<any_file>

Sau đó, bạn nên đặt đường dẫn đến lớp phủ này trong defconfig

System configuration > Root filesystem overlay directories

(hoặc, tìm BR2_ROOTFS_OVERLAY)

Ngoài ra, đường dẫn được đề xuất cho lớp phủ này là board/<company>/<boardname>/rootfs-overlay


Thiết lập mẫu khi sử dụng Buildroot làm mô hình con: github.com/cirosantilli/linux-kernel-module-cheat/blob/,
Ciro Santilli 改造

1
OP chỉ sử dụng BusyBox và cho biết anh ta muốn đạt được mục tiêu của mình mà không cần xây dựng. Tôi không thấy câu trả lời này có liên quan đến câu hỏi. Đó là một nhận xét cho câu trả lời được chấp nhận.
Tim
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.