Initial commit
This commit is contained in:
566
ipc/linuxrt/6.6.116/README.md
Normal file
566
ipc/linuxrt/6.6.116/README.md
Normal file
@@ -0,0 +1,566 @@
|
||||
# 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*
|
||||
Reference in New Issue
Block a user