566 lines
16 KiB
Markdown
566 lines
16 KiB
Markdown
# Hướng dẫn Build Linux Kernel Realtime
|
|
|
|
Hướng dẫn này mô tả cách build Linux kernel với patch realtime (RT) để có độ trễ thấp cho các ứng dụng thời gian thực.
|
|
|
|
## Phiên bản sử dụng
|
|
|
|
- **Kernel**: Linux 6.6.116
|
|
- **RT Patch**: patch-6.6.116-rt66
|
|
|
|
## Yêu cầu hệ thống
|
|
|
|
### Phần cứng tối thiểu
|
|
- RAM: ít nhất 4GB (khuyến nghị 8GB+)
|
|
- Ổ cứng: ít nhất 20GB dung lượng trống
|
|
- CPU: hỗ trợ đa nhân để tăng tốc quá trình build
|
|
|
|
### Phần mềm cần thiết (Ubuntu/Debian)
|
|
```bash
|
|
sudo apt update
|
|
sudo apt install -y build-essential libncurses-dev bison flex libssl-dev libelf-dev \
|
|
fakeroot dwarves zstd liblz4-tool bc kmod cpio initramfs-tools \
|
|
git wget curl xz-utils debhelper
|
|
```
|
|
|
|
## Bước 1: Tải xuống Kernel và RT Patch
|
|
|
|
### Tạo thư mục làm việc
|
|
```bash
|
|
mkdir -p ~/kernel-build
|
|
cd ~/kernel-build
|
|
```
|
|
|
|
### Tải kernel source
|
|
```bash
|
|
wget https://mirrors.edge.kernel.org/pub/linux/kernel/v6.x/linux-6.6.116.tar.xz
|
|
```
|
|
|
|
### Tải RT patch
|
|
```bash
|
|
wget https://mirrors.edge.kernel.org/pub/linux/kernel/projects/rt/6.6/patch-6.6.116-rt66.patch.xz
|
|
```
|
|
|
|
### Kiểm tra tính toàn vẹn (tùy chọn)
|
|
```bash
|
|
# Tải signature files để verify (nếu có)
|
|
wget https://mirrors.edge.kernel.org/pub/linux/kernel/v6.x/linux-6.6.116.tar.sign
|
|
wget https://mirrors.edge.kernel.org/pub/linux/kernel/projects/rt/6.12/patch-6.6.116-rt66.patch.sign
|
|
```
|
|
|
|
## Bước 2: Giải nén và áp dụng RT Patch
|
|
|
|
### Giải nén kernel
|
|
```bash
|
|
tar -xf linux-6.6.116.tar.xz
|
|
cd linux-6.6.116
|
|
```
|
|
|
|
### Giải nén và áp dụng RT patch
|
|
```bash
|
|
xzcat ../patch-6.6.116-rt66.patch.xz | patch -p1
|
|
```
|
|
|
|
**Lưu ý**: Nếu có lỗi khi patch, kiểm tra:
|
|
- Đảm bảo đang ở trong thư mục kernel source
|
|
- Kiểm tra phiên bản patch có khớp với kernel không
|
|
- Có thể cần `--dry-run` để test trước: `patch -p1 --dry-run < ../patch-6.6.116-rt66.patch`
|
|
|
|
## Bước 3: Cấu hình Kernel
|
|
|
|
### Sao chép cấu hình hiện tại (khuyến nghị)
|
|
```bash
|
|
cp /boot/config-$(uname -r) .config
|
|
```
|
|
|
|
### Hoặc tạo cấu hình mặc định
|
|
```bash
|
|
make defconfig
|
|
```
|
|
|
|
### Cấu hình RT-specific options
|
|
```bash
|
|
make menuconfig
|
|
```
|
|
|
|
**Đường dẫn cụ thể trong menuconfig để cấu hình RT (Kernel 6.6.116-rt66):**
|
|
|
|
#### 1. High Resolution Timers và Tick Handling
|
|
```
|
|
General setup --->
|
|
Timers subsystem --->
|
|
[*] High Resolution Timer Support (CONFIG_HIGH_RES_TIMERS)
|
|
Timer tick handling (Full dynticks system (tickless)) --->
|
|
(X) Full dynticks system (tickless) (CONFIG_NO_HZ_FULL)
|
|
```
|
|
|
|
#### 2. RT Preemption Model (QUAN TRỌNG NHẤT)
|
|
```
|
|
General setup --->
|
|
[*] Expert users only (CONFIG_EXPERT) - PHẢI BẬT TRƯỚC
|
|
Preemption Model (Fully Preemptible Kernel (Real-Time)) --->
|
|
(X) Fully Preemptible Kernel (Real-Time) (CONFIG_PREEMPT_RT)
|
|
```
|
|
|
|
**Lưu ý quan trọng**:
|
|
- PHẢI bật `CONFIG_EXPERT=y` trước khi có thể thấy option `PREEMPT_RT`
|
|
- Option này nằm trong `General setup`, KHÔNG phải `Processor type and features`
|
|
|
|
#### 3. Kernel Tracing (để debug RT latency)
|
|
```
|
|
Kernel hacking --->
|
|
Tracers --->
|
|
[*] Kernel Function Tracer (CONFIG_FUNCTION_TRACER)
|
|
[*] Preemption-off Latency Tracer (CONFIG_PREEMPT_TRACER)
|
|
[*] Interrupts-off Latency Tracer (CONFIG_IRQSOFF_TRACER)
|
|
[*] Scheduling Latency Tracer (CONFIG_SCHED_TRACER)
|
|
[*] Trace max stack (CONFIG_STACK_TRACER)
|
|
```
|
|
|
|
#### 4. Tắt Debug Info (giảm kích thước package)
|
|
```
|
|
Kernel hacking --->
|
|
Compile-time checks and compiler options --->
|
|
[ ] Compile the kernel with debug info (CONFIG_DEBUG_INFO) - TẮT
|
|
[ ] Generate BTF typeinfo (CONFIG_DEBUG_INFO_BTF) - TẮT
|
|
```
|
|
|
|
#### 5. Processor Features (Tùy chọn thêm)
|
|
```
|
|
Processor type and features --->
|
|
Timer frequency (1000 HZ) --->
|
|
(X) 1000 HZ (CONFIG_HZ_1000) - Khuyến nghị cho RT
|
|
[*] Symmetric multi-processing support (CONFIG_SMP)
|
|
```
|
|
|
|
### Kiểm tra và xóa TRUSTED_KEYS/REVOCATION_KEYS
|
|
Khi copy config từ máy khác, cần kiểm tra và xóa các key không tồn tại:
|
|
|
|
```bash
|
|
# Kiểm tra các key files
|
|
grep -E "CONFIG_SYSTEM_TRUSTED_KEYS|CONFIG_SYSTEM_REVOCATION_KEYS" .config
|
|
|
|
# Xóa các key files không tồn tại
|
|
scripts/config --set-str CONFIG_SYSTEM_TRUSTED_KEYS ""
|
|
scripts/config --set-str CONFIG_SYSTEM_REVOCATION_KEYS ""
|
|
```
|
|
|
|
### Cấu hình nhanh bằng scripts (thay vì menuconfig)
|
|
Nếu không muốn dùng menuconfig, có thể cấu hình nhanh bằng lệnh:
|
|
|
|
```bash
|
|
# QUAN TRỌNG: Phải enable EXPERT trước
|
|
scripts/config --enable CONFIG_EXPERT
|
|
|
|
# Enable RT preemption và các tùy chọn cần thiết
|
|
scripts/config --enable CONFIG_PREEMPT_RT
|
|
scripts/config --enable CONFIG_HIGH_RES_TIMERS
|
|
scripts/config --enable CONFIG_NO_HZ_FULL
|
|
scripts/config --set-val CONFIG_HZ_1000 y
|
|
scripts/config --set-val CONFIG_HZ 1000
|
|
|
|
# Enable tracing cho debug RT latency
|
|
scripts/config --enable CONFIG_PREEMPT_TRACER
|
|
scripts/config --enable CONFIG_IRQSOFF_TRACER
|
|
scripts/config --enable CONFIG_SCHED_TRACER
|
|
scripts/config --enable CONFIG_FUNCTION_TRACER
|
|
scripts/config --enable CONFIG_STACK_TRACER
|
|
|
|
# Tắt debug symbols để giảm kích thước package
|
|
scripts/config --disable CONFIG_DEBUG_INFO
|
|
scripts/config --disable CONFIG_DEBUG_INFO_BTF
|
|
scripts/config --disable CONFIG_DEBUG_INFO_DWARF4
|
|
scripts/config --disable CONFIG_DEBUG_INFO_DWARF5
|
|
scripts/config --disable CONFIG_DEBUG_INFO_REDUCED
|
|
scripts/config --disable CONFIG_DEBUG_INFO_COMPRESSED
|
|
|
|
# Cập nhật dependencies và kiểm tra
|
|
make olddefconfig
|
|
|
|
# Kiểm tra cấu hình RT đã được enable chưa
|
|
scripts/config --state CONFIG_EXPERT
|
|
scripts/config --state CONFIG_PREEMPT_RT
|
|
scripts/config --state CONFIG_HIGH_RES_TIMERS
|
|
```
|
|
|
|
## Bước 4: Build Kernel
|
|
|
|
### Kiểm tra số CPU cores
|
|
```bash
|
|
nproc
|
|
```
|
|
|
|
### Build kernel packages (không tạo debug packages)
|
|
```bash
|
|
make -j$(nproc) bindeb-pkg
|
|
```
|
|
|
|
**Lưu ý về bindeb-pkg:**
|
|
- `bindeb-pkg`: Tạo binary packages (.deb) không có debug symbols
|
|
- Nhanh hơn và tạo ra file nhỏ hơn so với `deb-pkg`
|
|
- Không tạo ra `linux-image-*-dbg.deb` (debug package)
|
|
|
|
**Các tùy chọn build khác (nếu cần):**
|
|
```bash
|
|
# Build kernel image only
|
|
make -j$(nproc)
|
|
|
|
# Build modules only
|
|
make -j$(nproc) modules
|
|
|
|
# Build với debug (không khuyến nghị - tạo file lớn)
|
|
make -j$(nproc) deb-pkg
|
|
```
|
|
|
|
### Kiểm tra cấu hình trước khi build
|
|
```bash
|
|
# Kiểm tra các config quan trọng
|
|
grep -E "CONFIG_PREEMPT_RT|CONFIG_HIGH_RES_TIMERS|CONFIG_NO_HZ_FULL" .config
|
|
grep -E "CONFIG_CPU_FREQ|CONFIG_CPU_IDLE" .config
|
|
grep -E "CONFIG_DEBUG_INFO" .config
|
|
|
|
# Kết quả mong muốn:
|
|
# CONFIG_PREEMPT_RT=y
|
|
# CONFIG_HIGH_RES_TIMERS=y
|
|
# CONFIG_NO_HZ_FULL=y
|
|
# # CONFIG_CPU_FREQ is not set
|
|
# # CONFIG_CPU_IDLE is not set
|
|
# # CONFIG_DEBUG_INFO is not set
|
|
```
|
|
|
|
**Thời gian build**: Khoảng 30 phút - 2 giờ tùy theo cấu hình máy.
|
|
|
|
## Bước 5: Cài đặt Kernel
|
|
|
|
### Cài đặt từ Debian packages
|
|
|
|
#### Cách 1: Cài đặt trực tiếp vào hệ thống
|
|
```bash
|
|
cd ..
|
|
# List các file .deb được tạo
|
|
ls -la linux-*.deb
|
|
|
|
# Cài đặt kernel packages (không có debug package)
|
|
sudo dpkg -i linux-image-*.deb linux-headers-*.deb
|
|
```
|
|
|
|
#### Cách 2: Cài đặt vào folder đặc biệt (khuyến nghị để test)
|
|
```bash
|
|
cd ..
|
|
# Tạo folder để cài kernel tạm thời
|
|
sudo mkdir -p /opt/rt-kernel
|
|
export KERNEL_INSTALL_DIR="/opt/rt-kernel"
|
|
|
|
# Giải nén package để kiểm tra nội dung trước
|
|
dpkg-deb --extract linux-image-*.deb $KERNEL_INSTALL_DIR/
|
|
dpkg-deb --extract linux-headers-*.deb $KERNEL_INSTALL_DIR/
|
|
|
|
# Xem cấu trúc files được cài
|
|
ls -la $KERNEL_INSTALL_DIR/
|
|
tree $KERNEL_INSTALL_DIR/ || find $KERNEL_INSTALL_DIR/ -type f | head -20
|
|
|
|
# Copy kernel files vào /boot từ folder tạm
|
|
sudo cp $KERNEL_INSTALL_DIR/boot/vmlinuz-* /boot/
|
|
sudo cp $KERNEL_INSTALL_DIR/boot/initrd.img-* /boot/
|
|
sudo cp $KERNEL_INSTALL_DIR/boot/System.map-* /boot/
|
|
sudo cp $KERNEL_INSTALL_DIR/boot/config-* /boot/
|
|
|
|
# Copy modules vào /lib/modules
|
|
sudo cp -r $KERNEL_INSTALL_DIR/lib/modules/* /lib/modules/
|
|
|
|
# Tạo symbolic links (nếu cần)
|
|
sudo ln -sf /boot/vmlinuz-6.6.116-rt66 /boot/vmlinuz-rt
|
|
sudo ln -sf /boot/initrd.img-6.6.116-rt66 /boot/initrd.img-rt
|
|
```
|
|
|
|
#### Cách 3: Sử dụng dpkg với --root option
|
|
```bash
|
|
cd ..
|
|
# Cài vào thư mục riêng để kiểm tra
|
|
sudo mkdir -p /tmp/kernel-staging
|
|
sudo dpkg --root=/tmp/kernel-staging -i linux-image-*.deb
|
|
|
|
# Xem files sẽ được cài
|
|
find /tmp/kernel-staging -name "vmlinuz*" -o -name "initrd*"
|
|
|
|
# Copy thủ công vào hệ thống sau khi kiểm tra
|
|
sudo cp /tmp/kernel-staging/boot/* /boot/
|
|
sudo cp -r /tmp/kernel-staging/lib/modules/* /lib/modules/
|
|
```
|
|
|
|
**Files được tạo bởi bindeb-pkg:**
|
|
- `linux-image-*-rt*.deb` - Kernel image và modules
|
|
- `linux-headers-*-rt*.deb` - Headers cho development
|
|
- `linux-libc-dev_*.deb` - Libc development files
|
|
|
|
### Cập nhật bootloader
|
|
```bash
|
|
sudo update-grub
|
|
```
|
|
|
|
### Đặt RT kernel làm mặc định
|
|
Sau khi cài đặt và update-grub, cần đặt RT kernel làm boot option mặc định:
|
|
|
|
#### Cách 1: Sử dụng grub-set-default
|
|
```bash
|
|
# Liệt kê các kernel entries trong GRUB
|
|
grep "menuentry\|submenu" /boot/grub/grub.cfg | grep -E "(rt|6\.6\.116)"
|
|
|
|
# Đặt kernel RT làm mặc định (thay số 0 bằng index thực tế)
|
|
sudo grub-set-default "1>2" # Ví dụ: submenu 1, entry 2
|
|
|
|
# Hoặc sử dụng tên đầy đủ
|
|
sudo grub-set-default "Advanced options for Ubuntu>Ubuntu, with Linux 6.6.116-rt66"
|
|
```
|
|
|
|
#### Cách 2: Chỉnh sửa /etc/default/grub
|
|
```bash
|
|
# Backup file gốc
|
|
sudo cp /etc/default/grub /etc/default/grub.backup
|
|
|
|
# Chỉnh sửa GRUB_DEFAULT
|
|
sudo nano /etc/default/grub
|
|
```
|
|
|
|
Thay đổi dòng:
|
|
```bash
|
|
# Từ:
|
|
GRUB_DEFAULT=0
|
|
|
|
# Thành (với saved):
|
|
GRUB_DEFAULT=saved
|
|
GRUB_SAVEDEFAULT=true
|
|
|
|
# Hoặc chỉ định trực tiếp:
|
|
GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with Linux 6.6.116-rt66"
|
|
```
|
|
|
|
#### Cách 3: Sử dụng grub-reboot (tạm thời)
|
|
```bash
|
|
# Boot vào RT kernel chỉ cho lần khởi động tiếp theo
|
|
sudo grub-reboot "Advanced options for Ubuntu>Ubuntu, with Linux 6.6.116-rt66"
|
|
```
|
|
|
|
### Cập nhật GRUB sau khi thay đổi
|
|
```bash
|
|
sudo update-grub
|
|
```
|
|
|
|
## Bước 6: Khởi động với RT Kernel
|
|
|
|
### Reboot và chọn kernel
|
|
```bash
|
|
sudo reboot
|
|
```
|
|
|
|
Trong GRUB menu, chọn kernel mới với tên có chứa "rt" hoặc version 6.6.116.
|
|
|
|
### Kiểm tra RT kernel đã load
|
|
```bash
|
|
uname -a
|
|
# Nên thấy output có chứa "rt12" và "PREEMPT_RT"
|
|
|
|
cat /sys/kernel/realtime
|
|
# Nên output "1" nếu RT enabled
|
|
```
|
|
|
|
### Kiểm tra kernel mặc định hiện tại
|
|
```bash
|
|
# Xem kernel nào sẽ boot mặc định
|
|
sudo grub-editenv list
|
|
|
|
# Xem tất cả kernel entries có sẵn
|
|
awk -F\' '/menuentry |submenu / {print $1 $2}' /boot/grub/grub.cfg
|
|
|
|
# Kiểm tra GRUB_DEFAULT hiện tại
|
|
grep "GRUB_DEFAULT" /etc/default/grub
|
|
```
|
|
|
|
### Xóa kernel cũ (tùy chọn)
|
|
Sau khi đã chắc chắn RT kernel hoạt động tốt:
|
|
|
|
#### Nếu cài bằng dpkg trực tiếp:
|
|
```bash
|
|
# Liệt kê các kernel packages đã cài
|
|
dpkg --list | grep linux-image
|
|
|
|
# Xóa kernel cũ (cẩn thận!)
|
|
sudo apt remove linux-image-<version-cũ>
|
|
sudo apt autoremove
|
|
|
|
# Cập nhật GRUB sau khi xóa
|
|
sudo update-grub
|
|
```
|
|
|
|
#### Nếu cài từ folder đặc biệt:
|
|
```bash
|
|
# Xóa files kernel cũ từ /boot
|
|
sudo rm /boot/vmlinuz-<version-cũ>
|
|
sudo rm /boot/initrd.img-<version-cũ>
|
|
sudo rm /boot/System.map-<version-cũ>
|
|
sudo rm /boot/config-<version-cũ>
|
|
|
|
# Xóa modules cũ
|
|
sudo rm -rf /lib/modules/<version-cũ>
|
|
|
|
# Cleanup staging folder
|
|
sudo rm -rf /opt/rt-kernel
|
|
sudo rm -rf /tmp/kernel-staging
|
|
|
|
# Cập nhật GRUB
|
|
sudo update-grub
|
|
```
|
|
|
|
## Bước 7: Tối ưu hóa hệ thống cho RT
|
|
|
|
### Kernel parameters
|
|
Thêm vào `/etc/default/grub`:
|
|
```bash
|
|
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash isolcpus=1-3 nohz_full=1-3 rcu_nocbs=1-3"
|
|
```
|
|
|
|
Trong đó:
|
|
- `isolcpus=1-3`: Cô lập CPU cores 1-3 cho RT tasks
|
|
- `nohz_full=1-3`: Tắt timer interrupts trên cores này
|
|
- `rcu_nocbs=1-3`: RCU callbacks không chạy trên cores này
|
|
|
|
### RT scheduling policy
|
|
```bash
|
|
# Set RT priority cho process
|
|
sudo chrt -f 99 your_rt_application
|
|
|
|
# Check RT processes
|
|
ps -eo pid,cls,rtprio,ni,comm | grep -E "(FF|RR)"
|
|
```
|
|
|
|
### Memory locking
|
|
```bash
|
|
# Lock memory để tránh page faults
|
|
ulimit -l unlimited
|
|
```
|
|
|
|
## Kiểm tra hiệu năng RT
|
|
|
|
### Test latency với cyclictest
|
|
```bash
|
|
# Cài đặt rt-tests
|
|
sudo apt install rt-tests
|
|
|
|
# Test latency cơ bản
|
|
cyclictest -t1 -p99 -n -i200 -l1000
|
|
|
|
# Test stress với load
|
|
cyclictest -t4 -p99 -n -i200 -l10000 -q
|
|
```
|
|
|
|
### Test với hackbench
|
|
```bash
|
|
hackbench -l 10000
|
|
```
|
|
|
|
## Xử lý sự cố
|
|
|
|
### Lỗi build do TRUSTED_KEYS
|
|
```bash
|
|
# Nếu gặp lỗi về certificate/key files
|
|
make[4]: *** No rule to make target 'debian/canonical-certs.pem'
|
|
|
|
# Giải pháp: Xóa các key files
|
|
scripts/config --set-str CONFIG_SYSTEM_TRUSTED_KEYS ""
|
|
scripts/config --set-str CONFIG_SYSTEM_REVOCATION_KEYS ""
|
|
make clean && make -j$(nproc) bindeb-pkg
|
|
```
|
|
|
|
### GRUB không hiện RT kernel
|
|
```bash
|
|
# Nếu không thấy RT kernel trong GRUB menu
|
|
sudo update-grub
|
|
sudo grub-install /dev/sda # thay sda bằng disk thực tế
|
|
|
|
# Kiểm tra kernel files có tồn tại không
|
|
ls -la /boot/vmlinuz-*rt*
|
|
ls -la /boot/initrd.img-*rt*
|
|
|
|
# Nếu cài từ folder đặc biệt, kiểm tra permissions
|
|
sudo chmod 644 /boot/vmlinuz-*rt*
|
|
sudo chmod 644 /boot/initrd.img-*rt*
|
|
sudo chown root:root /boot/vmlinuz-*rt* /boot/initrd.img-*rt*
|
|
|
|
# Rebuild initramfs nếu cần
|
|
sudo update-initramfs -u -k 6.6.116-rt66
|
|
```
|
|
|
|
### Kernel files không đúng vị trí (khi cài từ folder đặc biệt)
|
|
```bash
|
|
# Kiểm tra kernel modules đã được copy chưa
|
|
ls -la /lib/modules/ | grep rt
|
|
|
|
# Nếu thiếu modules, copy lại từ staging folder
|
|
sudo cp -r /opt/rt-kernel/lib/modules/6.6.116-rt66 /lib/modules/
|
|
|
|
# Update module dependencies
|
|
sudo depmod -a 6.6.116-rt66
|
|
|
|
# Kiểm tra symbolic links
|
|
ls -la /boot/ | grep -E "vmlinuz$|initrd.img$"
|
|
```
|
|
|
|
### Không boot được vào RT kernel
|
|
```bash
|
|
# Boot vào kernel cũ và kiểm tra
|
|
journalctl -b -1 | grep -i error
|
|
|
|
# Kiểm tra kernel modules
|
|
sudo depmod -a 6.6.116-rt66
|
|
sudo update-initramfs -u -k 6.6.116-rt66
|
|
|
|
# Reset GRUB default về kernel cũ
|
|
sudo grub-set-default 0
|
|
sudo update-grub
|
|
```
|
|
|
|
### Kernel panic khi boot
|
|
- Boot với kernel cũ từ GRUB
|
|
- Kiểm tra logs: `dmesg` hoặc `/var/log/kern.log`
|
|
- Có thể cần disable một số drivers/modules
|
|
|
|
### Hiệu năng kém
|
|
- Kiểm tra `CONFIG_PREEMPT_RT=y` trong `/boot/config-*`
|
|
- Verify kernel parameters với `cat /proc/cmdline`
|
|
- Check IRQ affinity: `cat /proc/interrupts`
|
|
|
|
### Module driver không tương thích
|
|
```bash
|
|
# List missing modules
|
|
dmesg | grep -i "unknown symbol\|unresolved symbol"
|
|
|
|
# Rebuild external modules
|
|
sudo dkms autoinstall
|
|
```
|
|
|
|
### File .deb quá lớn
|
|
Nếu vẫn tạo ra file quá lớn:
|
|
```bash
|
|
# Kiểm tra debug info đã tắt chưa
|
|
grep DEBUG_INFO .config
|
|
|
|
# Nên thấy:
|
|
# CONFIG_DEBUG_INFO is not set
|
|
# CONFIG_DEBUG_INFO_BTF is not set
|
|
```
|
|
|
|
## Tham khảo
|
|
|
|
- [Linux RT Wiki](https://rt.wiki.kernel.org/)
|
|
- [Real-Time Linux Kernel Documentation](https://www.kernel.org/doc/Documentation/admin-guide/real-time-kernel.txt)
|
|
- [RT-Tests Suite](https://git.kernel.org/pub/scm/utils/rt-tests/rt-tests.git)
|
|
|
|
## Ghi chú
|
|
|
|
- **Backup**: Luôn backup kernel cũ trước khi cài RT kernel
|
|
- **Testing**: Test kỹ trên môi trường dev trước khi deploy production
|
|
- **Updates**: RT patches thường ra sau kernel chính vài tuần/tháng
|
|
- **Hardware**: Một số hardware cần firmware/drivers đặc biệt cho RT
|
|
|
|
---
|
|
*Được tạo ngày: $(date)*
|
|
*Version: 1.0* |