My presentation at Software Free Day 2017 - 16 September 2017, organized by Vietnam Free and Open Source Software Association.
http://sfd2017.vfossa.vn
2. • Làm việc với máy tính
và học ngôn ngữ lập
trình đầu tiên vào
năm 1981.
– EC1010 (IBM
System/360)
– BASIC
– Fortran
3. • 8 Years IBM
– Software Specialist
– Technology
Deployment Engineer
– IT Services
– Consultant
• 5 Years Microsoft
– Developer Evangelist
– Senior Consultant
– Software Architect
4. • XT 8086 4MHz, 8Mhz
• AT 80286 16MHz
• AT 80386
• AT 80486DX
• Pentium…
• PowerPC
• Pascal, Turbo Pascal
• OOP Turbo Pascal
• Assembly
• C, C++
• Java
5.
6.
7.
8.
9. • RedHat 4
• Caldera
• TurboLinux
• YellowDog
• SCO
• Fedora
• Gentoo
• Ubuntu
• Linux Mint
• Arch Linux
10. • Embedded Linux là sử dụng Linux trong các hệ
thông nhúng
• Áp dụng nhân Linux và tùy biến các thư viện, các
tiện ích user-space trong các ứng dụng nhúng để
sử dụng chúng trong các đồ điện tử tiêu dùng,
quản sự, y tế, công nghiệp và sản xuất ô-tô.
• Tạo ra một hệ thống Linux nhưng là việc làm giống
như trò chơi ghép hình. Lựa chọn đúng đắn để tạo
ra hệ điều hành.
11. • Khai thác bộ vi xử lý (đa nhiệm, đa
nhân, phân luồng)
• Dễ phát triển
• Tính mở của toàn hệ thống
12. • Hệ thống nhỏ, tài nguyên ít
• Hệ thống có tính đặc thù, chuyển dụng
cao
• Hệ thống thời gian thực
13. • Rẻ, chạy tốt, dễ lập trình
• Tiếp cận được mã nguồn
• Dễ chuyển mang lên các hệ thống kiến trúc
CPU khác
• Có nhiều trình điều khiển thiết bị
• Có rất nhiều ngôn ngũ và thư viện
• Phần mềm có độ mở, module hóa cao, dễ dàng
xây dựng tích hợp phần mềm mới.
14. • “Khi ta xây dựng từ đầu, nó sẽ là một
tiến trình không bao giờ kết thúc” – Tim
Bird, Sony Entertainment
• Hoàn toàn có thể sử dụng những distro
có sẵn, nhưng bạn sẽ gặp những hạn
chế khi cần sửa đổi.
15. • Không dễ.
• Để xây dựng được một hệ điều hành hoàn
chỉnh, không chỉ có nhân Linux, bạn sẽ phải xây
dựng và tích hợp các thành phần khác của hệ
điều hành (BootLoader, Libraries,
Commands,…)
• Nhưng bạn hoàn toàn có thể làm được mà
không cần đến bằng Tiến sĩ về xây dựng hệ
điều hành.
16. • Nếu bạn là người dùng Linux có kinh
nghiệm, và bạn nghĩ cần phải học them
nhiều thứ để làm được Linux nhúng? –
SAI
• Linux – Somethings = EmbeddedLinux
17. • Không – Android không phải embedded linux.
• Android là phiên bản tùy biến linux nhưng do
Google khởi xướng, có hệ sinh thái riêng tách
biệt với hệ sinh thái linux. Giao diện của
Android được tùy biến để khai thác màn hình
touch screen. Có rất nhiều hàm APIs để lập
trình cho Android, nhưng rất nhiều thiết bị
hoàn toàn không dùng đến các chức năng
Android, chẳng hạn như Google Maps.
18. • Cross Compiler
– Là compiler có khả năng sinh mã vận hành
trên nền tảng khác với nền tảng của chính
compiler.
19. • Bộ các công cụ hỗ trợ lập trình để tạo ra
trình ứng dụng khác.
• Một Toolchain đơn giản bao gồm một
trình biên dịch (compiler) và một linker
để biến mã nguồn thành mã máy, các
thư viện để tương tác với hệ điều hành
và một debugger.
20. • Một bộ công cụ phát triển thông thường trên hệ
thống GNU/Linux là một native toolchain.
• Với các hệ thống nhúng thông thường rất khó để
xây dựng một toolchain native.
– Hệ thống đích thường không đủ không gian lưu trữ và
bộ nhớ.
– Hệ thống đích thường chạy quá chậm.
• Khi đó ta phải dùng Cross-Toolchain, sử dụng trên
một máy nhưng sinh mã chương trình chạy được
trên máy khác.
21. X86 Binary Target Binary
Source Code
Native ToolChain Cross ToolChain
X86 Target CPU
X86
22. • Binutils là tập hợp các công cụ để sinh mã và kết nối nhị phân
cho kiến trúc CPU
– as, ld, ar, …
• Kernel headers
– Mô tả các hàm hệ thống, định nghĩa các biến, constant, cấu trúc dữ
liệu
• Thư viện C/C++
– Giao tiếp ứng dụng với hạt nhân (kernel)
– glibc hoặc uClibc
• GCC compiler
• GDB debugger
23. • Boot Loader (grub, Lilo, Uboot)
• Kernel (Normal or Real-Time)
• FileSystem (FHS)
• Configuration files
• C Library
• Common system commands
• User application(s)
24. • Bootloader
– Khởi tạo từ phần cứng, các chức năng cơ bản, nạp và vận
hành nhân Linux
• Nhân Linux
– Quản lý tiến trình và bộ nhớ, mạng, điều khiển thiết bị và
cung cấp các dịch vụ cho các ứng dụng user-space
• Thư viện hệ thông (C library)
– Giao tiếp giữa nhân và ứng dụng user-space
• Filesystem
– Bao gồm các lệnh Linux, thư viện và các scripts
25. • Tích hợp các thành phần, bootloader,
kernel, system libraries và ứng dụng
thành một hệ thống hoàn chỉnh.
• Cài đặt hệ điều hành vào thiết bị.
26. • Bootloader
– Phần cứng nạp từ địa chỉ cố định trong ROM / Flash
– Khởi tạo thết bị để tìm nhân nằm trên đĩa cứng, mạng hoặc đĩa ngoài.
– Nạp nhân vào bộ nhớ và vận hành
• Kernel
– Tự uncompress
– Khởi tạo lõi nhân và các trình điều khiển thiết bị được biên dịch static để truy cập
root filesystem
– Mount root filesystem có tham số
– Vận hành ứng dụng đầu tiền của userspace (tham số init)
• Vận hành ứng dụng đầu tiền, cấu hình và nạp tiếp các ứng dụng
khác và giao tiếp với user (nếu có)
27. Hardware
Linux Kernel
app A app B
C Library
User Space
Call a
service
Manage
Hardware
Event
notification
Event
Handler
28. • Khi bạn đã có hệ thống được tích hợp và
cài đặt, bạn hoàn toàn có thể viết bất kỳ
ứng dụng nào với ngôn ngữ lập trình
chạy được trên hệ điều hành nhúng
Embedded OS của bạn.