Embedded Linux Blog

Embedded Linux Blog

Share

Chia sẻ kiến thức mình học được về Embedded Linux

[Linux] Board nhúng rẻ nhất có thể chạy Linux 09/05/2026

[𝗟𝗶𝗻𝘂𝘅] 𝗕𝗼𝗮𝗿𝗱 𝗻𝗵𝘂́𝗻𝗴 𝗿𝗲̉ 𝗻𝗵𝗮̂́𝘁 𝗰𝗼́ 𝘁𝗵𝗲̂̉ 𝗰𝗵𝗮̣𝘆 𝗟𝗶𝗻𝘂𝘅 ?

(Mình có lập 1 group Facebook về Chia sẻ kiến thức lập trình nhúng, mong được các bạn tham gia ủng hộ: https://www.facebook.com/groups/1291288389349930)

BeagleBone Black giờ đã lên giá 2 triệu, Raspberry Pi cũng không quá hạt dẻ lắm. Vậy board rẻ nhất vẫn chạy được Linux nên là gì? Mình đã mất 2 tuần lang thang các board cho đến tự vẽ PCB — các bạn đọc đến cuối để biết mình chốt con gì nhé!

Dưới đây là các phần chính của bài viết:

✅ Điểm qua các board khá "ma đạo" vẫn boot được Linux
✅ Hành trình tự vẽ PCB Linux — từ Kicad đến lý do chưa đặt mạch
✅ Xem xét các lựa chọn: Allwinner V3S, Microchip SAM9X60, Orange Pi Zero 2W, Pocket Beagle 2.
✅ Fix lỗi Linux boot treo — chỉnh Device Tree bằng cách decompile DTB và disable node không dùng.
✅ Bypass mật khẩu image bằng cách boot thẳng vào /bin/sh qua boot.scr tự build với mkimage.

👉 Blog : https://embeddedlinux.blog/
👉 Youtube : https://www.youtube.com/
👉 Link post : https://embeddedlinux.blog/2026/05/09/linux-board-nhung-re-nhat-co-the-chay-linux/

Nếu bạn muốn bắt đầu học Linux nhúng mà ngân sách hạn chế, hi vọng bài này giúp bạn có thêm một lựa chọn để bắt tay vào vọc.

[Linux] Board nhúng rẻ nhất có thể chạy Linux Cùng với việc vật giá leo thang, Beaglebone Black giờ cũng loanh quanh 2 triệu rồi. Mình quyết định tìm board rẻ nhất có thể chạy Linux. Tầm tầm 2 tuần, và mình chốt con board mình sẽ lên series tr…

23/04/2026

𝗝𝗮𝗶𝗹𝗵𝗼𝘂𝘀𝗲 : 𝗖𝗵𝗶𝗮 𝗰𝗼𝗿𝗲 𝗖𝗣𝗨, 𝗗𝗲𝗺𝗼 — 𝗗𝘂𝗮𝗹 𝗟𝗶𝗻𝘂𝘅

Nay trong lúc ngồi vọc vạch thêm con FRDM i.MX93 thì mình có đọc đến đoạn chapter 17 của UG10163: Jailhouse and Xen Hypervisors.
KVM hoặc Xen thì mình đã nghe đến nhiều rồi. Nhưng jailhouse là lần đầu tiên mình nghe đến, nên cũng ngồi vọc vạch thử

𝗝𝗮𝗶𝗹𝗵𝗼𝘂𝘀𝗲 𝗹𝗮̀ 𝗴𝗶̀ — 𝘃𝗮̀ 𝘁𝗮̣𝗶 𝘀𝗮𝗼 𝗻𝗼́ 𝗸𝗵𝗮́𝗰

KVM và Xen hoạt động theo kiểu full virtualization — mỗi VM có vCPU riêng, hypervisor lên lịch và quản lý tài nguyên động. Overhead không nhỏ, jitter cao, không phù hợp cho real-time.

Jailhouse chọn hướng khác hoàn toàn: **static partitioning**. Không có scheduling, không có dynamic resource allocation. Mỗi "cell" được assign cứng CPU core, RAM range, và peripheral nào đó ngay từ lúc khởi động — và không bao giờ thay đổi.

Cái hay là: hypervisor overhead gần bằng zero. Core bạn assign cho inmate là core đó chạy inmate mãi mãi, không bị Linux root cell "cướp" lại dù có stress hết mức.

Với i.MX93 dual-core Cortex-A55:
- Core 1 → Root Cell: Linux bình thường, networking, OTA, logging
- Core 0 → Inmate Cell: real-time workload, isolated hoàn toàn

𝗗𝗲𝗺𝗼 — 𝗗𝘂𝗮𝗹 𝗟𝗶𝗻𝘂𝘅
Mở 2 terminal song song vào ttyACM0 và ttyACM1.
Chạy một lệnh, Jailhouse tách core 0 ra, load kernel image + DTB + cmdline vào inmate cell, và boot một Linux thứ hai hoàn toàn độc lập trên core đó.
Kết quả:
ttyACM0: root cell Linux — nproc báo 1 core, vì core 0 đã bị lấy
ttyACM1: inmate Linux đang boot — [0.000000] Booting Linux on physical CPU 0x0000000000
Hai Linux, hai UART, một board.

Nhìn chung là biết thêm 1 kiến thức mới, nhưng mình thấy cái này có vẻ không phổ biến lắm. Gốc thì Jailhouse do Siemens phát triển, và TI vs NXP cũng có những bản fork riêng. Nhưng ngoài 3 ông này ra chưa thấy demo ở đâu nữa.

Nếu ai đã và đang dùng thì mình mong được nghe đánh giá thêm về lợi hại của nó :vv

[Kernel-BBB] 1. KGDB qua UART 18/04/2026

[Kernel-BBB] 1. Debug Linux Kernel với KGDB qua UART

(Mình có lập 1 group Facebook về Chia sẻ kiến thức lập trình nhúng, mong được các bạn tham gia ủng hộ: https://www.facebook.com/groups/1291288389349930)

Gặp lỗi Kernel panic mà hàm printk không đủ sức truy vết? Bạn muốn step-code, đặt breakpoint và debug Linux Kernel trực tiếp trên board thật như một pro?

Chào mừng các bạn đến với series mới [Kernel-BBB].
Ở bài viết mở đầu này, mình sẽ hướng dẫn chi tiết cách thiết lập KGDB (Kernel GNU Debugger) thông qua cổng serial UART trên BeagleBone Black.

Dưới đây là các phần chính của bài viết:
✅ Khởi tạo và cấu hình meta-layer mới trong Yocto dành riêng cho Kernel.
✅ Thao tác cấu hình Kernel qua menuconfig: Bật KGDB, Debug info (DWARF5) và vô hiệu hóa Strict kernel.
✅ Cách trích xuất cấu hình config fragment thành file kgdb.cfg và apply qua file recipe .bbappend.
✅ Thiết lập tham số boot (U-Boot) và kích hoạt KGDB sysrq-trigger ở runtime.
✅ Kết nối và điều khiển debug từ máy Host bằng gdb-multiarch kèm các tập lệnh GDB cơ bản.

Lợi ích lớn nhất: Làm chủ KGDB giúp bạn "nhìn thấu" hệ thống đang chạy và xử lý lỗi trực tiếp ở cấp độ Kernel hoặc Device Driver. Đây là kỹ năng không thể thiếu đối với một BSP/Kernel Engineer.

👉 Blog : https://embeddedlinux.blog/
👉 Youtube : https://www.youtube.com/
👉 Link post : https://embeddedlinux.blog/2026/04/18/kernel-bbb-1-kgdb-qua-uart/

[Kernel-BBB] 1. KGDB qua UART Giữ nguyên cấu hình từ bài Yocto-BBB 1 mình thêm 1 meta-layer mới riêng cho phần kernel này 1. Tạo meta layer mới 1.1 Tạo meta layer và add vào bblayers1.2 Tạo recipe kernel append2. Cấu hình KGDB …

[Yocto-BBB] 19. Cấu hình share state , đẩy nhanh quá trình build 11/04/2026

[Yocto-BBB] 19. Cấu hình share state, đẩy nhanh quá trình build

(Mình có lập 1 group Facebook về Chia sẻ kiến thức lập trình nhúng, mong được các bạn tham gia ủng hộ: https://www.facebook.com/groups/1291288389349930)

Build Yocto tốn quá nhiều thời gian? Bạn có nhiều máy tính trong cùng mạng LAN và muốn kéo thành quả build từ máy này sang máy khác?

Ở bài viết số 19, mình sẽ hướng dẫn chi tiết cách cấu hình Shared State (sstate-cache), giúp bạn đẩy nhanh quá trình build một cách thao tác rất đơn giản. Dưới đây là các phần chính của bài viết:

✅ Thiết lập HTTP server thông qua Nginx để chia sẻ thư mục sstate-cache.
✅ Cách xử lý lỗi 403 Forbidden thường gặp do vấn đề quyền truy cập của user Nginx.
✅ Cấu hình các biến phía client trong file local.conf (bao gồm SSTATE_MIRRORS, BB_HASHSERVE).
✅ Chạy thử nghiệm thực tế với lệnh bitbake. Tỉ lệ tận dụng lại cache có thể lên tới 99% nếu cấu hình giữa các máy đồng nhất.

Lợi ích lớn nhất: Tính năng này giúp bạn tiết kiệm đáng kể thời gian ngồi chờ hệ thống build lại từ đầu. Nó đặc biệt hữu ích khi bạn sử dụng nhiều thiết bị hoặc làm việc theo nhóm.

👉 Blog : https://embeddedlinux.blog/
👉 Youtube : https://www.youtube.com/
👉 Link post : https://embeddedlinux.blog/2026/04/11/yocto-bbb-19-cau-hinh-share-state-day-nhanh-qua-trinh-build/

[Yocto-BBB] 19. Cấu hình share state , đẩy nhanh quá trình build 1. Thiết lập HTTP server Ở đây mình dùng nginx, các bạn hoàn toàn có thể dùng các cách đơn giản hơn. Vì ở đây đơn giản là share cái folder sstate-cache, từ 1 máy khác đã build yocto sang 1 máy cùng…

[Yocto-BBB] 18. GDB debug qua recipe-sysroot 31/03/2026

[Yocto-BBB] 18. GDB debug qua recipe-sysroot

(Mình có lập 1 group Facebook về Chia sẻ kiến thức lập trình nhúng, mong được các bạn tham gia ủng hộ: https://www.facebook.com/groups/1291288389349930)

Build xong một recipe trong Yocto, muốn debug file binary cho target (ví dụ ARM) mà không cần phần cứng thật? Hoàn toàn được — chỉ cần QEMU usermode + GDB multiarch + recipe-sysroot có sẵn trong output của recipe.

Trong bài này mình demo trên BeagleBone Black (armv7), debug ngay trên laptop x86_64. Mấy điểm mình ghi lại:

✅ Sysroot là gì — thư mục root filesystem ảo chứa headers, libraries phục vụ cross-compile. Trong Yocto mỗi recipe có recipe-sysroot riêng, tạo từ đúng DEPENDS của nó
✅ Tạo một recipe C đơn giản, build với bitbake và xem cấu trúc output (recipe-sysroot, recipe-sysroot-native, package, ...)
✅ Chạy QEMU usermode làm GDB server: qemu-arm -L -g
✅ Cấu hình launch.json trong VS Code với cppdbg, trỏ miDebuggerServerAddress về localhost:
✅ Set sysroot trong setupCommands để GDB resolve đúng symbols/libs
✅ Cài gdb-multiarch nếu chưa có

Lợi ích lớn nhất: debug được binary cross-compiled cho target ngay trên máy dev, không cần board thật. Rất hữu ích khi viết unit test hoặc tìm bug cho các service/application không phụ thuộc phần cứng — đẩy nhanh tốc độ phát triển đáng kể

👉 Blog : https://embeddedlinux.blog/
👉 Youtube : https://www.youtube.com/
👉 Link post : https://embeddedlinux.blog/2026/03/31/yocto-bbb-18-debug-qua-recipe-sysroot/

[Yocto-BBB] 18. GDB debug qua recipe-sysroot Ở bài này mình sẽ hướng dẫn các bạn về cách debug 1 file binary đã đươc build ra từ recipe-sysroot trong thư mục output của recipe đó. 1. Sysroot là gì ? 2. Build 1 recipes đơn giản, tìm hiểu recip…

12/03/2026

Arduino gần đây đã giới thiệu đến sản phẩm Arduino Ventuno Q, với hiệu năng vượt trội từ nền tảng chip của Qualcomm. Cơ mà có vẻ sau khi được thâu tóm, thì Arduino ngày càng ít thân thiện với người mới và hướng đến phân khúc cao hơn nhỉ :vv

Các bạn đánh giá sao về con board này và hướng đi của Arduino ?


https://www.facebook.com/share/v/1DbEzSYa6C/

02/03/2026

__builtin_popcount GCC function

Trong lúc học thuật toán, và học về SIMD, mình có hóng hớt được cái hàm bên trên. (Bài này thì chưa phải về SIMD :vv )

Tác dụng của nó sẽ là đếm số bit được set trong 1 số, đây là hàm được tích hợp sẵn trong GCC và chỉ mất 1 cycle cho việc tính toán

Thực tế có các phiên bản tương đương từ các bên khác ví dụ như :
- C++ (thư viện ) std::popcount(unsigned int)
- Clang, LLVM giữ nguyên tên :vv
- MSVC (thư viện ) __popcnt và __popcnt64

Mình áp dụng nó giải bài Leetcode 191. Number of 1 Bits
Thông thường ta sẽ dùng code dạng dạng như

"int hammingWeight(int n) {
int ans = 0;
while(n){
ans += (n % 2);
n /= 2;
}
return ans;
}"

sinh ra mã assembly dạng
" mov eax, edi
and eax, 1 ; n % 2
add esi, eax ; ans +=
shr edi, 1 ; n /= 2
jnz loop ; lặp 32 lần"

Còn nếu dùng popcount thì ta sẽ code kiểu

"int hammingWeight(int n) {
return __builtin_popcount(n);
}"

Ta sẽ được mã asm dạng
"popcnt eax, edi"

Tốc độ sẽ nhanh hơn cực kỳ nhiều.
Mình có đo với random uint64_t n chạy 100.000.000 lần, thì sự khác biệt là rất lớn

"Manual (loop + mod + div):
Time: 4015.18 ms
Ops/sec: 24.9055 million

__builtin_popcountll (single instruction):
Time: 180.049 ms
Ops/sec: 555.405 million

SPEEDUP: 22.3005x faster!"

Mình chỉ lấy ví dụ như trên để ta thấy dễ hiểu, còn khi học thuật toán mà lại dùng hàm thư viện thì cần gì thuật toán nữa nhỉ :vv .

Mình cũng chưa chuyên bên mảng đo perfomance này lắm, nên có gì sai sót mong được các bạn đóng góp

Hehe !!

[GIT] 1. Git send-email (patch Linux kernel) 28/02/2026

[𝗚𝗜𝗧] 𝟭. 𝗚𝗶𝘁 𝘀𝗲𝗻𝗱-𝗲𝗺𝗮𝗶𝗹 (𝗽𝗮𝘁𝗰𝗵 𝗟𝗶𝗻𝘂𝘅 𝗸𝗲𝗿𝗻𝗲𝗹)

Nhiều community project không dùng GitHub/GitLab để tạo Pull Request, mà làm việc qua mailing list. Quy trình phổ biến sẽ là:
tạo patch → kiểm tra patch→ tìm maintainer → gửi patch đúng list / đúng người.

Trong bài này mình demo luôn trên linux-next (repo hơi nặng ~5.8GB nên ai chỉ muốn thử thì có thể chọn repo nhẹ hơn). Mấy điểm mình ghi lại:
✅Cài git-email và cấu hình ~/.gitconfig (smtp, user name/email)
✅Tạo patch bằng git format-patch
✅Check nhanh bằng ./scripts/checkpatch.pl (và nhớ Signed-off-by với git commit -s)
✅Tìm đúng người/đúng mailing list bằng ./scripts/get_maintainer.pl
✅Gửi patch với git send-email (+ --to/--cc nếu chưa nhúng sẵn trong patch)
✅Gmail thì cần App Password để SMTP login

Bonus: có thể thêm cover letter bằng --compose để giải thích context, thay vì nhồi quá nhiều vào commit message

Mình chưa có patch nào được merge đâu 😅 nhưng đang tập quy trình trước để chuẩn bị cho GSoC 2026 và các project sắp tới

Nếu trong bài có gì sai sót mong nhận được ý kiến đóng góp từ mọi người :vv

👉Blog : https://embeddedlinux.blog/
👉Youtube : https://www.youtube.com/
👉Link post : https://embeddedlinux.blog/2026/02/28/git-1-git-send-email-patch-linux-kernel-source/

[GIT] 1. Git send-email (patch Linux kernel) Mình dự tính gửi proposal cho 2 project Google summer of code 2026 năm nay, do đó có 1 kĩ năng nhỏ mình mới tìm hiểu được. Nó khá đơn giản thôi đó là git send-email. Cái này thì sẽ dùng cho các com…

Cội nguồn ít ai biết của giao diện đồ họa Mac - Ngọn lửa được Steve Jobs cướp từ tay các vị thần Xerox 26/02/2026

Ngày nay chúng ta đã quen thuộc với Hệ điều hành có giao diện nhiều. Có ai thắc mắc vậy ai là người khai sinh ra nó không ?

Bài này có thể không liên quan trực tiếp đến Lập trinh Nhúng nhưng mình thấy khá hay nên muốn chia sẻ cho mọi người : https://genk.vn/coi-nguon-it-ai-biet-cua-giao-dien-do-hoa-mac-ngon-lua-duoc-steve-jobs-cuop-tu-tay-cac-vi-than-xerox-2016111112312701.chn

Trước đấy mình thường nghĩ Windows là đi đầu ở giai đoạn khai sinh của PC ra là chưa phải :vv

Kể đôi khi đọc thêm lịch sử để hiểu hơn tại sao có cái này có cái kia mình thấy cũng hay, và cũng hiểu hơn về các thiên tài (lắm tài nhiều tật ) đứng sau nó :vv.

Cội nguồn ít ai biết của giao diện đồ họa Mac - Ngọn lửa được Steve Jobs cướp từ tay các vị thần Xerox "Cuối năm 1979, một nhóm kỹ sư và lãnh đạo của Apple đã được Steve Jobs đã đi thăm PARC. Trong chuyến đi này, Jobs đã phát hiện ra công nghệ trỏ chuột, cửa sổ, biểu tượng (icon) và các công nghệ khác do PARC phát triển. Các phát minh kỳ...

Introducing the 185 Organizations for GSoC 2026 22/02/2026

Google Summer of Code (GSoC)

Vậy là Google đã công bố 185 tổ chức kèm danh sách project ideas rồi!
Nếu các bạn đủ 18 tuổi trở lên, muốn đóng góp vào dự án open-source thực tế, hay cũng như làm đẹp thêm CV thì chần chừ gì không thử :vv
Các project sẽ có nhiều mức độ khó khác nhau cũng như thời gian dự kiến hoàn thành. 1 Project nhỏ mức dễ sẽ dao động 90h, project mức vừa dao động 175h, và mức khó ước tính thường tầm 350h.

Các bạn follow page mình khả năng cao domain sẽ là nhiều về C/C++, embedded, linux, ... Mình qua cũng mò tìm hiểu thì ví dụ như FOSSASIA sẽ có 3 project idea liên quan đến cải thiện Led Badge Magic chẳng hạn. À chắc chắn rồi có cả project đến từ Linux Foundation, nhưng mình có xem thì đều ở độ khó cao, yêu cầu tầm 350h làm nên sẽ căng đấy :vv

Thời gian mở đăng ký là 16/3 - 31/3.

Danh sách idea nhiều lắm, chúc mọi người chọn được project vừa sức và viết proposal thật ổn áp nhé !!

https://opensource.googleblog.com/2026/02/introducing-the-185-organizations-for-gsoc-2026.html

Introducing the 185 Organizations for GSoC 2026 The complete list of GSoC Mentoring Organizations is now available! 2026 brings us 185 open source communities who are eager to mentor.

[STM32MP1-Youtube] 1. Nạp firmware core M4 từ core A7 Linux, mở rộng rootfs 02/02/2026

[STM32MP1-Youtube] 1. Nạp firmware core M4 từ core A7 Linux, mở rộng rootfs
👉(Mình có mới lập 1 group Facebook về Chia sẻ kiến thức lập trình nhúng, mong được các bạn tham gia ủng hộ: https://www.facebook.com/groups/1291288389349930 )

✅ Flow nhanh của bài:
Build GPIO_EXTI example trong STM32CubeIDE lấy GPIO_EXTI_CM4.elf
Copy .elf vào thẻ nhớ (rootfs)
Nạp firmware qua remoteproc:
echo GPIO_EXTI_CM4.elf tới firmware
echo start tới state

Nếu dính lỗi “rootfs quá nhỏ”: tạo layer riêng + bbappend để tăng size image (tweak IMAGE_OVERHEAD_FACTOR) rồi build lại core-image-minimal
✅ Kết quả:
Kernel log báo "remote processor m4 is now up", và bấm USER1/USER2 trên board là thấy LED LD5/LD6 nháy ngay đúng như ví dụ về ngắt ngoài cho nút bấm
Mình ghi lại chi tiết từng bước (clone STM32CubeMP1 repo, import project, copy file, chỉnh layer priority, bbappend…) để anh em có thể làm theo từ A→Z.

👉Blog : https://embeddedlinux.blog/
👉Link video : https://www.youtube.com/watch?v=r8wuYSXJ664

[STM32MP1-Youtube] 1. Nạp firmware core M4 từ core A7 Linux, mở rộng rootfs Hôm nay mình thử “đánh thức" core Cortex-M4 ngay từ Linux: build ra file .elf, copy vào rootfs, rồi dùng /sys/class/remoteproc để nạp và start firmware.Blog ...

Want your school to be the top-listed School/college in Hanoi?
Click here to claim your Sponsored Listing.

Telephone

Address

Hanoi
100000