- Tilck là một kernel đơn khối tương thích nhị phân với Linux, được thiết kế cho mục đích giáo dục và hệ thống nhúng
- Hướng tới giảm thiểu tối đa mức sử dụng tài nguyên, nên hữu ích trong các thiết bị nhúng hoặc môi trường bị giới hạn
- Có thể chạy nguyên trạng các ứng dụng người dùng Linux hiện có như BusyBox, nên không cần viết ứng dụng riêng
- Hỗ trợ các kiến trúc i686 và RISC-V64, và có kế hoạch port sang ARM cùng CPU không có MMU trong tương lai
- Bao gồm nhiều tính năng như hệ thống tệp, quản lý tiến trình, console, gỡ lỗi, và cũng có thể chạy Vim, Micropython, Lua
- Hỗ trợ khởi động trên QEMU và phần cứng thật, đồng thời có môi trường kiểm thử và gỡ lỗi được chuẩn bị tốt để cả người mới bắt đầu cũng dễ thử nghiệm
Overview
-
What is Tilck?
- Tilck là một kernel giáo dục tương thích Linux với thiết kế nhỏ gọn và đơn giản
- Không cần ứng dụng riêng như một số kernel khác, mà có thể sử dụng các chương trình Linux được build bằng toolchain dựa trên musl
- Có thể chạy nhiều ứng dụng như BusyBox, Vim, TinyCC
- Cấu trúc monolithic, xử lý mọi chức năng trong một không gian kernel duy nhất như Linux
- Cũng rất chú trọng đến khả năng chạy trên phần cứng thực tế
-
Future plans
- Phù hợp với môi trường nhúng cần hệ thống độ trễ cực thấp và hoàn toàn xác định
- Nhắm đến một vị trí ngách giữa Embedded Linux và FreeRTOS/Zephyr
- Có kế hoạch hỗ trợ ARM64, MMU-less, mạng (UDP/IP) và thiết bị lưu trữ (FAT32, ext2)
- Mục tiêu dài hạn là hỗ trợ cả tính năng mạng và lưu trữ trên các SoC như Raspberry Pi 3/4
-
What Tilck is NOT?
- Tilck không phải là dự án nhằm thay thế Linux
- Không nhắm đến hệ điều hành desktop (không hỗ trợ X server, v.v.)
- Tilck tối giản tính năng để giữ được sự đơn giản và tính thời gian thực
-
Tilck vs Linux
- Linux phức tạp vì đa tính năng, còn Tilck chọn sự đơn giản, gọn nhẹ, độ trễ cực thấp
- Tilck cũng nỗ lực xây dựng hạ tầng kiểm thử ở mức gần với enterprise
Features
-
Hỗ trợ i686
- Đồng thời hỗ trợ phần cứng cũ (8259 PIC, 8254 PIT, v.v.) và tính năng hiện đại (SSE, AVX, ACPI, v.v.)
- Có thể xử lý sự kiện nguồn và xem thông tin pin thông qua ACPI
- Đã được kiểm thử trên nhiều môi trường x86 khác nhau (BIOS, UEFI, CSM, v.v.)
-
Hỗ trợ riscv64
- Kiến trúc tập trung vào nhúng
- Hỗ trợ QEMU và bo mạch Sipeed licheerv-nano
- Thông tin thiết bị được truyền qua device tree, không có mã phụ thuộc bo mạch trong kernel
- Hỗ trợ ns16550 UART, bộ điều khiển ngắt PLIC/INTC, v.v.
-
File systems
- Hỗ trợ ramfs, devfs, sysfs
- FAT16 và FAT32 được hỗ trợ ở chế độ chỉ đọc, và có thể memory-map
- Có VFS, nhưng không hỗ trợ block device (mọi thứ hoạt động trong bộ nhớ)
-
Processes and signals
- Hỗ trợ các tính năng tiến trình/tín hiệu cơ bản như
fork, vfork, waitpid, rt_sigaction
- Không hỗ trợ đa luồng không gian người dùng, nhưng đã triển khai TLS (
set_thread_area) theo yêu cầu của libmusl
-
I/O
- Ngoài
read, write còn hỗ trợ readv, writev, select, poll
- Không hỗ trợ epoll
-
Console
- Đã triển khai hơn 90% tính năng của console Linux
- Hỗ trợ cả chế độ văn bản và framebuffer
- Mức độ hoàn thiện đủ để Vim chạy hoàn hảo trên Tilck
-
Userspace applications
- Có thể chạy các ứng dụng console và framebuffer như BusyBox, Vim, Micropython, Lua, fbDOOM
Booting Tilck
-
Tilck's bootloader
- Tilck đi kèm bootloader hỗ trợ cả BIOS/UEFI
- Có thể chọn chế độ video, chọn kernel, chỉnh sửa dòng lệnh
-
3rd-party bootloaders
- Có thể khởi động Tilck bằng bootloader hỗ trợ Multiboot 1.0 (ví dụ: GRUB)
- Cũng có sẵn ví dụ cấu hình GRUB
A comment about user experience
- Tilck được thiết kế để ngay cả lập trình viên mới cũng dễ build/test
- Cung cấp script build toolchain riêng, không tạo gánh nặng cài đặt phụ thuộc
- Tương tự
buildroot nhưng đơn giản hơn nhiều
- Cũng cung cấp nhiều script chạy QEMU khác nhau
1 bình luận
Ý kiến trên Hacker News
Đây có vẻ là một dự án thú vị nằm ở khoảng giữa giữa Unix đời đầu như xv6 (phiên bản 1975, xem Lion book) và nhân Linux đầy đủ, thật vui khi thấy nó chạy trên bo mạch RISC-V LicheeRV Nano giá 9 USD (CPU 64-bit 1.0GHz (C906), MMU, FPU, bộ xử lý vector 128-bit, 256MB DDR3), bo này có hiệu năng tương đương Pentium III đời giữa hoặc PowerPC G4, có lẽ cũng sẽ rất dễ port sang Milk-V Duo 256M, Duo S hoặc Duo (64MB RAM, 5 USD) dùng cùng SoC, hiện tại vẫn chưa có hỗ trợ mạng, thiết bị khối hay đa lõi
G4 có Altivec cho hiệu năng multimedia gần như ngang Pentium IV có SSE2
Cứ vài tháng lại thấy xuất hiện một nhân HĐH mới chỉ chạy trong VM mà không có lớp trừu tượng phần cứng, Tilck không phải kiểu đó, Tilck là một hệ điều hành thật sự, chạy được trên phần cứng thật, trong khi mảng trước đã gần như bão hòa thì Tilck lại lấp khá tốt một ngách từ lâu gần như bỏ trống
Rất ấn tượng với tốc độ khởi động cực nhanh của Tilck và việc nó còn chạy được doom bằng framebuffer, có thể xem tại https://www.youtube.com/watch?v=Ce1pMlZO_mI, cũng rất thích khi thấy tác giả trực tiếp trả lời thân thiện các câu hỏi của sinh viên CS trên YouTube
Tôi có thấy Tilck được ghi là "mang tính giáo dục", nhưng nếu chỉ thay bootloader thì không biết nó có đủ dùng cho các thiết bị nhúng cỡ nhỏ hay không
File README của Tilck dài hơn dự đoán nhưng rất thú vị, nếu là người phát triển HĐH thì rất đáng đọc
Với những người như tôi đã lớn lên cùng Minix trong môi trường giáo dục, thật tò mò không biết Tilck sẽ hữu ích đến mức nào
Chia sẻ các liên kết thảo luận HN trước đây về Tilck:
Tilck rất thú vị nhưng hơi tiếc vì không có hỗ trợ multi-user, giá mà ít nhất hỗ trợ các thao tác như chmod/chgrp và thay đổi owner, group của file thì có lẽ sẽ hữu dụng hơn nhiều cho những chỗ như máy chủ NFS, mong tác giả sẽ cân nhắc lại việc phát triển hỗ trợ multi-user
Khả năng tương thích filesystem của Tilck còn là vấn đề lớn hơn thế, thật ra với nhu cầu của tôi thì một nền tảng đã được kiểm chứng về độ tin cậy vẫn tốt hơn, Tilck được định hướng cho giáo dục nên không phù hợp về mặt an toàn thông tin hay độ bền dữ liệu
Cũng có thể nghĩ tới cách chỉ ghi giá trị user:group vào filesystem rồi khi runtime chỉ áp dụng lúc phục vụ client, ví dụ nếu file server Linux chạy bằng root thì vẫn có thể kiểm tra quyền và quản lý ownership mà không cần tự đổi user, hoặc fork theo từng phiên rồi chuyển sang user của client tương ứng, như vậy kernel sẽ tự ép quyền và việc xử lý quyền file cũng được giải quyết tự động
Dự án này thực sự rất ấn tượng, làm tôi nhớ lại thời còn chạy Linux làm tường lửa NAT trên đĩa mềm 3.5 inch