# Đặt cấu hình cài đặt postboot

Cài đặt postboot bao gồm hoàn tất thiết lập ban đầu, đặt cấu hình bộ nhớ và các tham số tần số CPU. Các bước này đảm bảo cấu hình và chức năng phù hợp sau khi hệ thống khởi động.

## Tổng quan về Postboot framework

Tệp postboot script được dùng để đặt cấu hình các tham số hệ thống trên bản phân phối Qualcomm Linux.

Cài đặt postboot được quản lý thông qua tệp *systemd service*.

Để biết thêm thông tin về systemd, hãy xem [systemd(1) - Linux manual page](https://www.man7.org/linux/man-pages/man1/systemd.1.html).

## Tổng quan về systemd service

Systemd service là một tiến trình nền có chức năng khởi động hoặc dừng dựa trên các điều kiện cụ thể.

Tệp `systemd service` được viết để cho phép systemd phân tích cú pháp, hiểu và chạy theo lệnh.

Để biết thêm thông tin về tiến trình nền, hãy xem [background process](https://linuxhandbook.com/run-process-background/).

## Cấu trúc cơ bản của tệp dịch vụ systemd

Để sửa đổi hành vi của systemd theo yêu cầu, hãy sử dụng quy trình sau:

Sau đây là ví dụ về tệp dịch vụ systemd:

[Unit]
    SourcePath=/etc/initscripts/log_restrict.sh
    Description=QTI logging service
    
    [Service]
    ExecStart=/etc/initscripts/post_boot.sh
    
    [Install]
    WantedBy=multi-user.target
    Copy to clipboard

### Phần `[Unit]`

Trong systemd, một đơn vị (unit) là tài nguyên bất kỳ mà hệ thống có thể vận hành và quản lý. Nó bao gồm các dịch vụ (services), socket, thiết bị (devices), điểm mount (mount points), và các nhóm tiến trình được tạo từ bên ngoài.

Mỗi đơn vị được định nghĩa bằng một tệp cấu hình gọi là tệp `unit`. Tệp này có thông tin chi tiết về cấu hình và metadata. Phần `[Unit]` trong một tệp đơn vị cung cấp thông tin về nội dung mô tả và mối quan hệ với các đơn vị khác.

Phần `[Unit]` có các trường sau:

Bảng: Các trường được hỗ trợ cho phần [Unit]

| Các trường | Mô tả |
| --- | --- |
| Description<br>    Copy to clipboard | Tiêu đề dễ đọc của dịch vụ systemd. |
| After<br>    Copy to clipboard | Thiết lập Phần phụ thuộc cho một dịch vụ. Ví dụ: nếu đang đặt cấu hình một máy chủ web WCN3960, bạn cần đảm bảo dịch vụ này khởi động sau khi có kết nối mạng. |
| Before<br>    Copy to clipboard | Bắt đầu dịch vụ hiện tại trước dịch vụ khác. Trong ví dụ này, máy chủ web WCN3960 đang chạy trước khi dịch vụ đám mây được chạy do dịch vụ đám mây phụ thuộc vào máy chủ web WCN3960. |

### Phần `[Service]`

Phần `[Service]` chứa thông tin chi tiết về việc thực thi và kết thúc dịch vụ.

Phần `[Service]` có các trường sau:

Bảng: Các trường được hỗ trợ cho phần [Service]

| Các trường | Mô tả |
| --- | --- |
| ExecStart<br>    Copy to clipboard | Lệnh mà bạn phải chạy khi dịch vụ khởi động. Ví dụ: một dịch vụ máy chủ web cần khởi động. |
| ExecReload<br>    Copy to clipboard | Trường tùy chọn chỉ định cách khởi động lại một dịch vụ. Đối với dịch vụ thực hiện I/O ổ đĩa, bạn nên vô hiệu hóa rồi khởi động lại dịch vụ. Sử dụng trường `ExecReload` nếu bạn muốn có một cơ chế khởi động lại cụ thể. |
| Type<br>    Copy to clipboard | Chỉ định kiểu khởi động của một tiến trình cho dịch vụ systemd cụ thể. Các tùy chọn có sẵn bao gồm `simple`, `exec`, `forking`, `oneshot`, `dbus`, `notify` và `idle`. |

Để biết thêm thông tin, hãy xem [Options](https://www.freedesktop.org/software/systemd/man/latest/systemd.service.html?ref=linuxhandbook.com#Options).

### Phần `[Install]`

Phần `[Install]` xử lý việc cài đặt một dịch vụ systemd hoặc tệp đơn vị. Phần này được dùng khi chạy lệnh `systemctl enable` hoặc `systemctl disable` để bật hoặc tắt một dịch vụ.

Phần `[Install]` có các trường sau:

- `WantedBy`: Tương tự với trường `After` và `Before` trong  [Phần \[Unit\]](https://docs.qualcomm.com/doc/80-70020-3VI/topic/post-boot-settings.html#kernelexternaldocumentation-the-unit-section). Tuy nhiên, nó được dùng để chỉ định **cấp độ chạy** tương đương trong systemd.

    `default.target` được dùng khi toàn bộ quá trình khởi tạo hệ thống hoàn thành và bạn được yêu cầu đăng nhập. Hầu hết mọi dịch vụ liên quan trực tiếp đến người dùng (như WCN3960, cron, GNOME-stuff) đều sử dụng target này.

    `shutdown.target` dùng để chạy dịch vụ ngay trước khi thiết bị tắt.

    `multi-user.target` dùng để chạy dịch vụ tại thời điểm khởi động hệ thống, như người dùng root.

    Nó có thể là một target hoặc dịch vụ, chẳng hạn như `network.target`.
- `RequiredBy`: Trường này tương tự với `WantedBy`. Tuy nhiên, trường này chỉ định **phần phụ thuộc bắt buộc**. Nếu một phần phụ thuộc bị lỗi, dịch vụ cũng bị lỗi theo.

## Cài đặt dịch vụ postboot systemd

Tệp script postboot có trong recipe cốt lõi của lớp `meta-qcom-hwe`.

Chạy script postboot như một phần của dịch vụ systemd trước đó. Tất cả các cài đặt postboot đều được lưu trữ trong script `meta-qcom-hwe/recipes-core/initscripts/files/post_boot.sh`.

#!/bin/sh
    # Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
    # SPDX-License-Identifier: BSD-3-Clause-Clear
    
    # Apply postboot settings
    Copy to clipboard

### Recipe cho dịch vụ postboot systemd

Sử dụng tệp `initscripts_1.0.bbappend` để hiểu quy trình cấu hình recipe nhằm cài đặt script `post_boot`.

Recipe cài đặt postboot bash script trong `/etc/init.d` có trong tệp `meta-qcom-hwe/recipes-core/initscripts/initscripts_1.0.bbappend`.

# postboot
    
    inherit systemd externalsrc
    
    FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
    SRC_URI:append = " \
       file://post_boot.sh \
       file://logging-restrictions.sh \
       file://log-restrict.service \
       file://post-boot.service \
       "
    
    do_install:append() {
       # postboot
       install -m 0755 ${WORKDIR}/post_boot.sh ${D}${sysconfdir}/initscripts/post_boot.sh
       install -m 0644 ${WORKDIR}/post-boot.service -D ${D}${systemd_unitdir}/system/post-boot.service
       ln -sf ${systemd_unitdir}/system/post-boot.service ${D}${systemd_unitdir}/system/multi-user.target.wants/post-boot.service
    }
    
    S = "${WORKDIR}"
    
    INITSCRIPT_PACKAGES =+ "${PN}-post-boot"
    INITSCRIPT_NAME:${PN}-post-boot = "post_boot.sh"
    
    PACKAGES =+ "${PN}-post-boot"
    FILES:${PN}-post-boot += "${systemd_unitdir}/system/post-boot.service ${systemd_unitdir}/system/multi-user.target.wants/post-boot.service ${sysconfdir}/initscripts/post_boot.sh"
    Copy to clipboard

Last Published: Jan 01, 2026

[Previous Topic
Tổng quan về kiến trúc và quy trình khởi động](https://docs.qualcomm.com/bundle/publicresource/80-70020-3VI/topics/boot-flow-and-architecture-overview.md) [Next Topic
Phát triển kernel](https://docs.qualcomm.com/bundle/publicresource/80-70020-3VI/topics/kernel-development.md)