<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Bài viết on Embedded Linux Blog</title><link>https://embeddedlinux.blog/posts/</link><description>Recent content in Bài viết on Embedded Linux Blog</description><generator>Hugo</generator><language>vi</language><atom:link href="https://embeddedlinux.blog/posts/index.xml" rel="self" type="application/rss+xml"/><item><title>[Yocto-Lichee] 2. Làm quen, flash image tới thẻ nhớ board Lichee Pi Nano</title><link>https://embeddedlinux.blog/2026/09/05/yocto-lichee-2-lam-quen-voi-board-lichee-pi-nano/</link><pubDate>Sat, 05 Sep 2026 21:25:15 +0700</pubDate><guid>https://embeddedlinux.blog/2026/09/05/yocto-lichee-2-lam-quen-voi-board-lichee-pi-nano/</guid><description>&lt;p&gt;Bài này thì mình sẽ hướng dẫn các bạn làm quen, và test khi mới nhận board LicheePi Nano về mà muốn kiểm tra board còn sống không :vv.&lt;/p&gt;&#10;&lt;p&gt;Kể chắc cũng hơi ngược khi đến bài thứ 3 trong series Yocto-Lichee mới là bài làm quen :vv . Gần đây mình nhận ra Yocto khá là phức tạp với người mới, nên mình chắc sau với các bài căn bản sẽ sang Buildroot để build được image đã :vv .&lt;/p&gt;</description></item><item><title>[Yocto-BBB] 20. Build Yocto 6.0 wrynose cho board Beaglebone Black</title><link>https://embeddedlinux.blog/2026/06/20/yocto-bbb-20-build-yocto-6-0-wrynose-cho-board-beaglebone-black/</link><pubDate>Sat, 20 Jun 2026 06:09:00 +0700</pubDate><guid>https://embeddedlinux.blog/2026/06/20/yocto-bbb-20-build-yocto-6-0-wrynose-cho-board-beaglebone-black/</guid><description>&lt;p&gt;Vậy là tròn 1 năm từ hồi mình đăng bài đầu tiên về build Yocto cho Beaglebone Black. Ban đầu mình dùng phiên bản Kirkstone, sau đó update lên Scarthgap và mình nghĩ là nó sẽ khá bền :vv , nhưng lên phiên bản Wrynose đã có sự thay đổi khá lớn về cấu trúc. Nên mình viết thêm bài này về cách build ở version mới nhé, mình nghĩ từ bản 6.0 này trở đi, cấu trúc sẽ được giữ nguyên.&lt;/p&gt;</description></item><item><title>[Device-Driver-Lichee] 3. Gpioget, Dùng nút bấm điều khiển led</title><link>https://embeddedlinux.blog/2026/06/13/device-driver-lichee-3-gpioget-dung-nut-bam-dieu-khien-led/</link><pubDate>Sat, 13 Jun 2026 06:23:00 +0700</pubDate><guid>https://embeddedlinux.blog/2026/06/13/device-driver-lichee-3-gpioget-dung-nut-bam-dieu-khien-led/</guid><description>&lt;p&gt;Nói là dùng nút bấm, mà mình lục tung đống đồ điện tử lên không thấy con nút bấm cắm nào, toàn nút bấm dán. Nên bài này mình sẽ dùng biến trở nhưng với vai trò tương tự nút bấm nhé :vv&lt;/p&gt;</description></item><item><title>[Device-Driver-Lichee] 2. Blink led bằng gpioset, tạo led node Device Tree</title><link>https://embeddedlinux.blog/2026/06/06/device-driver-lichee-2-blink-led-bang-gpioset-tao-led-node-device-tree/</link><pubDate>Sat, 06 Jun 2026 06:46:00 +0700</pubDate><guid>https://embeddedlinux.blog/2026/06/06/device-driver-lichee-2-blink-led-bang-gpioset-tao-led-node-device-tree/</guid><description>&lt;p&gt;Okay, sau bài 1 ta đã có 1 board lên được terminal để vọc vạch rồi, giờ đến Hello world của thế giới nhúng. Ta thử Blink Led nhé&lt;/p&gt;&#10;&lt;h2 id="1-licheepi-nano-pinout"&gt;1. LicheePi Nano pinout&lt;/h2&gt;&#10;&lt;p&gt;Các bạn lên mạng tìm sipeed licheepi nano là sẽ ra 1 loạt, đây là pinout từ Sipeed&lt;/p&gt;</description></item><item><title>[Device-Driver-Lichee] 1. Build image và flash tới board</title><link>https://embeddedlinux.blog/2026/05/30/device-driver-lichee-0-build-image-va-flash-toi-board/</link><pubDate>Sat, 30 May 2026 06:03:00 +0700</pubDate><guid>https://embeddedlinux.blog/2026/05/30/device-driver-lichee-0-build-image-va-flash-toi-board/</guid><description>&lt;p&gt;Thay vì dùng yocto mình nghĩ chính ra cũng khá phức tạp với người mới, mình sẽ đơn giản hóa bằng build đơn lẻ uboot, kernel, lấy root file system có sẵn để flash tới board. Rồi ta sẽ bắt đầu series Device Driver mà chưa cần quan tâm yocto là gì :vv&lt;/p&gt;</description></item><item><title>[Yocto-Lichee] 1. Build Yocto Scarthgap cho board Lichee Pi Nano</title><link>https://embeddedlinux.blog/2026/05/24/yocto-lichee-1-build-yocto-scarthgap-cho-board-lichee-pi-nano/</link><pubDate>Sun, 24 May 2026 18:26:27 +0700</pubDate><guid>https://embeddedlinux.blog/2026/05/24/yocto-lichee-1-build-yocto-scarthgap-cho-board-lichee-pi-nano/</guid><description>&lt;p&gt;Thực tế mình đã porting xong và update vào meta-layer nên công việc khá nhàn, mình sẽ để 1 note ở cuối bài về mình đã phải sửa gì để port từ Yocto 3.0 Zeus lên Yocto 5.0 Scarthgap&lt;/p&gt;&#10;&lt;h2 id="1-chuẩn-bị-máy-host"&gt;1. Chuẩn bị máy host&lt;/h2&gt;&#10;&lt;div class="code-block is-term" translate="no" data-lang="bash" data-pagefind-weight="0.4"&gt;&#10; &lt;div class="code-head" data-pagefind-ignore&gt;&lt;span class="lang"&gt;bash&lt;/span&gt;&lt;button type="button" class="copy-btn" aria-label="Copy" data-copied="Đã copy"&gt;&lt;svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;rect x="9" y="9" width="11" height="11" rx="2"/&gt;&lt;path d="M5 15V5a2 2 0 012-2h10"/&gt;&lt;/svg&gt;&lt;span&gt;Copy&lt;/span&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre class="term"&gt;&lt;code&gt;&lt;span class="line"&gt;&lt;span class="t-c"&gt;sudo&lt;/span&gt; &lt;span class="t-c"&gt;apt-get&lt;/span&gt; update &lt;span class="t-op"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="t-c"&gt;sudo&lt;/span&gt; apt-get install &lt;span class="t-o"&gt;-y&lt;/span&gt; \&lt;span class="t-op"&gt;\&lt;/span&gt;&lt;/span&gt;&#10;&lt;span class="line"&gt; gawk wget git diffstat unzip texinfo \&lt;span class="t-op"&gt;\&lt;/span&gt;&lt;/span&gt;&#10;&lt;span class="line"&gt; gcc g++ build-essential chrpath socat cpio \&lt;span class="t-op"&gt;\&lt;/span&gt;&lt;/span&gt;&#10;&lt;span class="line"&gt; python3 python3-pip python3-pexpect python3-git python3-jinja2 \&lt;span class="t-op"&gt;\&lt;/span&gt;&lt;/span&gt;&#10;&lt;span class="line"&gt; python3-dev python3-setuptools swig \&lt;span class="t-op"&gt;\&lt;/span&gt;&lt;/span&gt;&#10;&lt;span class="line"&gt; python2 python2-dev \&lt;span class="t-op"&gt;\&lt;/span&gt;&lt;/span&gt;&#10;&lt;span class="line"&gt; libtool autoconf automake \&lt;span class="t-op"&gt;\&lt;/span&gt;&lt;/span&gt;&#10;&lt;span class="line"&gt; xz-utils debianutils iputils-ping \&lt;span class="t-op"&gt;\&lt;/span&gt;&lt;/span&gt;&#10;&lt;span class="line"&gt; libsdl1.2-dev xterm \&lt;span class="t-op"&gt;\&lt;/span&gt;&lt;/span&gt;&#10;&lt;span class="line"&gt; file lz4 zstd \&lt;span class="t-op"&gt;\&lt;/span&gt;&lt;/span&gt;&#10;&lt;span class="line"&gt; locales&lt;/span&gt;&#10;&lt;span class="line"&gt;&lt;/span&gt;&#10;&lt;span class="line"&gt;&lt;span class="t-c"&gt;sudo&lt;/span&gt; &lt;span class="t-c"&gt;locale-gen&lt;/span&gt; en_US.UTF-8&lt;/span&gt;&#10;&lt;span class="line"&gt;&lt;span class="t-c"&gt;export&lt;/span&gt; LANG=en_US.UTF-8&lt;/span&gt;&#10;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;h2 id="2-clone-source-code-và-build"&gt;2. Clone source code và build&lt;/h2&gt;&#10;&lt;div class="code-block is-term" translate="no" data-lang="bash" data-pagefind-weight="0.4"&gt;&#10; &lt;div class="code-head" data-pagefind-ignore&gt;&lt;span class="lang"&gt;bash&lt;/span&gt;&lt;button type="button" class="copy-btn" aria-label="Copy" data-copied="Đã copy"&gt;&lt;svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;rect x="9" y="9" width="11" height="11" rx="2"/&gt;&lt;path d="M5 15V5a2 2 0 012-2h10"/&gt;&lt;/svg&gt;&lt;span&gt;Copy&lt;/span&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre class="term"&gt;&lt;code&gt;&lt;span class="line"&gt;&lt;span class="t-c"&gt;cd&lt;/span&gt; &lt;span class="t-pa"&gt;~&lt;/span&gt;&lt;/span&gt;&#10;&lt;span class="line"&gt;&lt;span class="t-c"&gt;mkdir&lt;/span&gt; yocto&lt;/span&gt;&#10;&lt;span class="line"&gt;&lt;span class="t-c"&gt;cd&lt;/span&gt; yocto&lt;/span&gt;&#10;&lt;span class="line"&gt;&lt;span class="t-c"&gt;git&lt;/span&gt; clone &lt;span class="t-o"&gt;-b&lt;/span&gt; scarthgap &lt;span class="t-u"&gt;git://git.yoctoproject.org/poky.git&lt;/span&gt;&lt;/span&gt;&#10;&lt;span class="line"&gt;&lt;span class="t-c"&gt;cd&lt;/span&gt; poky&lt;/span&gt;&#10;&lt;span class="line"&gt;&lt;/span&gt;&#10;&lt;span class="line"&gt;&lt;span class="t-cm"&gt;# meta layer hổ trợ hầu hết các tools, thư viện cần thiết cho một distro linux&lt;/span&gt;&lt;/span&gt;&#10;&lt;span class="line"&gt;&lt;span class="t-c"&gt;git&lt;/span&gt; clone &lt;span class="t-o"&gt;-b&lt;/span&gt; scarthgap&lt;/span&gt;&#10;&lt;span class="line"&gt;&lt;/span&gt;&#10;&lt;span class="line"&gt;&lt;span class="t-cm"&gt;# meta layer support compile qt5 và install vào rom cho LicheePi Nano&lt;/span&gt;&lt;/span&gt;&#10;&lt;span class="line"&gt;&lt;span class="t-c"&gt;git&lt;/span&gt; clone &lt;span class="t-o"&gt;-b&lt;/span&gt; scarthgap&lt;/span&gt;&#10;&lt;span class="line"&gt;&lt;/span&gt;&#10;&lt;span class="line"&gt;&lt;span class="t-cm"&gt;# meta layer hổ trợ cho board LicheePi Nano (Linux kernel, u-boot)&lt;/span&gt;&lt;/span&gt;&#10;&lt;span class="line"&gt;&lt;span class="t-c"&gt;git&lt;/span&gt; clone &lt;span class="t-o"&gt;-b&lt;/span&gt; scarthgap&lt;/span&gt;&#10;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;div class="code-block is-term" translate="no" data-lang="bash" data-pagefind-weight="0.4"&gt;&#10; &lt;div class="code-head" data-pagefind-ignore&gt;&lt;span class="lang"&gt;bash&lt;/span&gt;&lt;button type="button" class="copy-btn" aria-label="Copy" data-copied="Đã copy"&gt;&lt;svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;rect x="9" y="9" width="11" height="11" rx="2"/&gt;&lt;path d="M5 15V5a2 2 0 012-2h10"/&gt;&lt;/svg&gt;&lt;span&gt;Copy&lt;/span&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre class="term"&gt;&lt;code&gt;&lt;span class="line"&gt;&lt;span class="t-cm"&gt;# Khởi tạo môi môi trường build yocto&lt;/span&gt;&lt;/span&gt;&#10;&lt;span class="line"&gt;&lt;span class="t-c"&gt;source&lt;/span&gt; oe-init-build-env build-f1c100s&lt;/span&gt;&#10;&lt;span class="line"&gt;&lt;/span&gt;&#10;&lt;span class="line"&gt;&lt;span class="t-cm"&gt;# copy các config example mình đã chuẩn bị sẵn&lt;/span&gt;&lt;/span&gt;&#10;&lt;span class="line"&gt;&lt;span class="t-c"&gt;cp&lt;/span&gt; &lt;span class="t-pa"&gt;../meta-f1c100s/conf/sample/normal-yocto/bblayers.conf.sample&lt;/span&gt; &lt;span class="t-pa"&gt;./conf/bblayers.conf&lt;/span&gt;&lt;/span&gt;&#10;&lt;span class="line"&gt;&lt;span class="t-c"&gt;cp&lt;/span&gt; &lt;span class="t-pa"&gt;../meta-f1c100s/conf/sample/normal-yocto/local.conf.sample&lt;/span&gt; &lt;span class="t-pa"&gt;./conf/local.conf&lt;/span&gt;&lt;/span&gt;&#10;&lt;span class="line"&gt;&lt;/span&gt;&#10;&lt;span class="line"&gt;&lt;span class="t-c"&gt;bitbake&lt;/span&gt; core-image-minimal&lt;/span&gt;&#10;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;h2 id="3-flash-và-test-image"&gt;3. Flash và test image&lt;/h2&gt;&#10;&lt;p&gt;Sau khi build xong output sẽ tại&lt;/p&gt;</description></item><item><title>[Yocto-Lichee] 0. Build Yocto Zeus cho board Lichee Pi Nano</title><link>https://embeddedlinux.blog/2026/05/16/yocto-lichee-0-build-yocto-zeus-cho-board-lichee-pi-nano/</link><pubDate>Sat, 16 May 2026 06:02:00 +0700</pubDate><guid>https://embeddedlinux.blog/2026/05/16/yocto-lichee-0-build-yocto-zeus-cho-board-lichee-pi-nano/</guid><description>&lt;p&gt;Mình chốt là sẽ dùng con Lichee Pi Nano làm con board giá rẻ cho series Device Driver sắp tới. Mình thấy có &lt;a href="https://fanning.vn/study_yocto/build_nano_yocto_licheepi_nano.html" target="_blank" rel="noopener"&gt;guide từ bác fanning (ninhnn2)&lt;/a&gt;&#10; đã hướng dẫn build cho board này bằng Yocto Zeus (3.0) từ 6 năm trước. Rất cảm ơn bác vì đã tạo meta layer BSP cho nó, việc khó nhất đã xong rồi !!&lt;/p&gt;</description></item><item><title>[Linux] Board nhúng rẻ nhất có thể chạy Linux</title><link>https://embeddedlinux.blog/2026/05/09/linux-board-nhung-re-nhat-co-the-chay-linux/</link><pubDate>Sat, 09 May 2026 06:15:00 +0700</pubDate><guid>https://embeddedlinux.blog/2026/05/09/linux-board-nhung-re-nhat-co-the-chay-linux/</guid><description>&lt;p&gt;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 trong thời gian tới. Bởi mình nghĩ nếu board rẻ thì sẽ có nhiều người tiếp cận vọc vạch được nhất nhỉ :vv. Các bạn nhớ đọc đến cuối để biết board mình chọn nhé&lt;/p&gt;</description></item><item><title>[Kernel-QEMU] 1. KGDB debug từ start_kernel với giao diện trên VS Code</title><link>https://embeddedlinux.blog/2026/05/02/kernel-qemu-1-kgdb-debug-tu-start_kernel-voi-giao-dien-tren-vs-code/</link><pubDate>Sat, 02 May 2026 06:27:00 +0700</pubDate><guid>https://embeddedlinux.blog/2026/05/02/kernel-qemu-1-kgdb-debug-tu-start_kernel-voi-giao-dien-tren-vs-code/</guid><description>&lt;p&gt;Như mình đã nói bên bài Kernel-BBB 2, hiện tại nếu không dùng JTAG bên BBB thì khả năng sẽ không debug kernel từ dòng đầu tiên được. Do đó mình sẽ quay sang hướng QEMU để kiểm soát toàn bộ vụ code này.&lt;/p&gt;</description></item><item><title>[Kernel-BBB] 2. kgdbwait và gdb server</title><link>https://embeddedlinux.blog/2026/04/25/kernel-bbb-2-kgdbwait-va-gdb-server/</link><pubDate>Sat, 25 Apr 2026 06:09:00 +0700</pubDate><guid>https://embeddedlinux.blog/2026/04/25/kernel-bbb-2-kgdbwait-va-gdb-server/</guid><description>&lt;p&gt;Bài này mình sẽ dùng kgdbwait để ta có thể debug được kernel sớm hơn (Chưa sớm bằng qua JTAG) cũng như setup gdb server để dùng extensions của VS Code luôn :vv&lt;/p&gt;&#10;&lt;h2 id="1-cấu-hình-kernel-command-line"&gt;1. Cấu hình kernel command line&lt;/h2&gt;&#10;&lt;h3 id="11-tìm-hướng-đi"&gt;1.1 Tìm hướng đi&lt;/h3&gt;&#10;&lt;p&gt;Ở bài trước, mình đã cố sửa boot command qua u-boot, nhưng thực tế thì&lt;/p&gt;</description></item><item><title>[Kernel-BBB] 1. KGDB qua UART</title><link>https://embeddedlinux.blog/2026/04/18/kernel-bbb-1-kgdb-qua-uart/</link><pubDate>Sat, 18 Apr 2026 06:56:00 +0700</pubDate><guid>https://embeddedlinux.blog/2026/04/18/kernel-bbb-1-kgdb-qua-uart/</guid><description>&lt;p&gt;Giữ nguyên cấu hình từ bài &lt;a href="https://embeddedlinux.blog/2025/06/28/yocto-bbb-1-build-beaglebone-black-image-bang-yocto-project/"&gt;Yocto-BBB 1&lt;/a&gt;&#10; mình thêm 1 meta-layer mới riêng cho phần kernel này&lt;/p&gt;&#10;&lt;h2 id="1-tạo-meta-layer-mới"&gt;1. Tạo meta layer mới&lt;/h2&gt;&#10;&lt;h3 id="11-tạo-meta-layer-và-add-vào-bblayers"&gt;1.1 Tạo meta layer và add vào bblayers&lt;/h3&gt;&#10;&lt;div class="code-block is-term" translate="no" data-lang="bash" data-pagefind-weight="0.4"&gt;&#10; &lt;div class="code-head" data-pagefind-ignore&gt;&lt;span class="lang"&gt;bash&lt;/span&gt;&lt;button type="button" class="copy-btn" aria-label="Copy" data-copied="Đã copy"&gt;&lt;svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;rect x="9" y="9" width="11" height="11" rx="2"/&gt;&lt;path d="M5 15V5a2 2 0 012-2h10"/&gt;&lt;/svg&gt;&lt;span&gt;Copy&lt;/span&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre class="term"&gt;&lt;code&gt;&lt;span class="line"&gt;&lt;span class="t-p"&gt;$&lt;/span&gt; &lt;span class="t-c"&gt;source&lt;/span&gt; oe-init-build-env &lt;span class="t-pa"&gt;build-bbb/&lt;/span&gt;&lt;/span&gt;&#10;&lt;span class="line"&gt;&lt;span class="t-p"&gt;&lt;span class="t-pu"&gt;zk47@ltu&lt;/span&gt;:&lt;span class="t-pd"&gt;~/Youtube/Yocto/yocto-bbb/poky/build-bbb&lt;/span&gt;$&lt;/span&gt; &lt;span class="t-c"&gt;bitbake-layers&lt;/span&gt; create-layer &lt;span class="t-pa"&gt;../meta-kernel&lt;/span&gt;&lt;/span&gt;&#10;&lt;span class="line"&gt;&lt;span class="t-out"&gt;NOTE: Starting bitbake server...&lt;/span&gt;&lt;/span&gt;&#10;&lt;span class="line"&gt;&lt;span class="t-out"&gt;Add your new layer with 'bitbake-layers add-layer ../meta-kernel'&lt;/span&gt;&lt;/span&gt;&#10;&lt;span class="line"&gt;&lt;span class="t-out"&gt;&lt;/span&gt;&lt;/span&gt;&#10;&lt;span class="line"&gt;&lt;span class="t-p"&gt;$&lt;/span&gt; &lt;span class="t-c"&gt;bitbake-layers&lt;/span&gt; add-layer &lt;span class="t-pa"&gt;../meta-kernel&lt;/span&gt;&lt;/span&gt;&#10;&lt;span class="line"&gt;&lt;span class="t-out"&gt;NOTE: Starting bitbake server...&lt;/span&gt;&lt;/span&gt;&#10;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;h3 id="12-tạo-recipe-kernel-append"&gt;1.2 Tạo recipe kernel append&lt;/h3&gt;&#10;&lt;p&gt;Ta dùng câu lệnh sau để biết được recipe kernel (Thực tế ta có thể dùng virtual/kernel nhưng nó kiểu tên chung, không chỉ đích danh)&lt;/p&gt;</description></item><item><title>[Yocto-BBB] 19. Cấu hình share state , đẩy nhanh quá trình build</title><link>https://embeddedlinux.blog/2026/04/11/yocto-bbb-19-cau-hinh-share-state-day-nhanh-qua-trinh-build/</link><pubDate>Sat, 11 Apr 2026 06:54:00 +0700</pubDate><guid>https://embeddedlinux.blog/2026/04/11/yocto-bbb-19-cau-hinh-share-state-day-nhanh-qua-trinh-build/</guid><description>&lt;h2 id="1-thiết-lập-http-server"&gt;1. Thiết lập HTTP server&lt;/h2&gt;&#10;&lt;p&gt;Ở đâ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 mạng&lt;/p&gt;</description></item><item><title>[Yocto-BBB] 18. GDB debug qua recipe-sysroot</title><link>https://embeddedlinux.blog/2026/03/31/yocto-bbb-18-debug-qua-recipe-sysroot/</link><pubDate>Tue, 31 Mar 2026 20:11:59 +0700</pubDate><guid>https://embeddedlinux.blog/2026/03/31/yocto-bbb-18-debug-qua-recipe-sysroot/</guid><description>&lt;p&gt;Ở 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 đó.&lt;/p&gt;&#10;&lt;h2 id="1-sysroot-là-gì-"&gt;1. Sysroot là gì ?&lt;/h2&gt;&#10;&lt;p&gt;Sysroot là system root, là 1 thư mục đóng vai trò như root filesystem ảo, dành cho quá trình cross-compile. Nó chứa các header files, libraries, và các artifact cần thiết để compiler/linker có thể build code cho target mà không cần chạy trực tiếp trên target.&lt;/p&gt;</description></item><item><title>[GIT] 1. Git send-email (patch Linux kernel)</title><link>https://embeddedlinux.blog/2026/02/28/git-1-git-send-email-patch-linux-kernel-source/</link><pubDate>Sat, 28 Feb 2026 10:17:25 +0700</pubDate><guid>https://embeddedlinux.blog/2026/02/28/git-1-git-send-email-patch-linux-kernel-source/</guid><description>&lt;p&gt;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 community project không dùng github hay gitlab để có thể tạo pull request, mà sẽ dùng mailling list, các bạn sẽ tạo patch gửi tới maintainer của subsystem. Tiêu biểu nhất chính là như Linux Kernel. Mình sẽ lấy ví dụ trong bài này với Linux Kernel codebase luôn nhé :vv (À mình chưa có patch nào được merge đâu nhưng sẽ phấn đấu trong tương lai gần :vv )&lt;/p&gt;</description></item><item><title>[Yocto-MX93] 2. Kết nối wifi, test thử Chromium</title><link>https://embeddedlinux.blog/2026/02/07/yocto-mx93-2-ket-noi-wifi-test-thu-chromium/</link><pubDate>Sat, 07 Feb 2026 07:34:09 +0700</pubDate><guid>https://embeddedlinux.blog/2026/02/07/yocto-mx93-2-ket-noi-wifi-test-thu-chromium/</guid><description>&lt;p&gt;1 cái hay khi dùng luôn image full tính năng từ hãng là bạn định thêm thắt gì khá đơn giản, và cũng có nhiều tài liệu từ hãng luôn&lt;/p&gt;&#10;&lt;h2 id="1-thêm-chromium-khi-build"&gt;1. Thêm Chromium khi build&lt;/h2&gt;&#10;&lt;p&gt;Đầu tiên, như mình đã bảo ở bài trước, tránh việc bạn sửa các file local.conf và bbalyers xong các bạn mới chạy source thì 2 file này. Thì ta chạy trước câu lệnh sau để khởi tạo môi trường build&lt;/p&gt;</description></item><item><title>[Yocto-MX93] 1. Build imx-image-full cho FRDM-i.MX93</title><link>https://embeddedlinux.blog/2026/01/31/yocto-mx93-1-build-imx-image-full-cho-frdm-i-mx93/</link><pubDate>Sat, 31 Jan 2026 22:07:48 +0700</pubDate><guid>https://embeddedlinux.blog/2026/01/31/yocto-mx93-1-build-imx-image-full-cho-frdm-i-mx93/</guid><description>&lt;p&gt;Ở các series Yocto cho Beaglebone Black, STM32MP157, mình đã làm nhiều về các tính năng căn bản, cách dùng yocto và đi lên từ core-image-minimal. Lần này mình sẽ build các tính năng cho board FRDM i.MX93 từ image full của hãng luôn.&lt;/p&gt;</description></item><item><title>[Android-BBB] 1. Chạy Android 6 trên Bealgebone Black</title><link>https://embeddedlinux.blog/2026/01/24/android-bbb-1-chay-android-6-tren-bealgebone-black/</link><pubDate>Sat, 24 Jan 2026 21:24:47 +0700</pubDate><guid>https://embeddedlinux.blog/2026/01/24/android-bbb-1-chay-android-6-tren-bealgebone-black/</guid><description>&lt;p&gt;Chắc chắn rồi Beaglbone Black chỉ có 512Mb, nên khó mà có thể chạy Android 1 cách mượt mà được. Mình làm thử, và viết bài này để những ai định thử, thì có thể trải nghiệm nhé :vv&lt;/p&gt;&#10;&lt;h2 id="1-android-6-image"&gt;1. Android 6 Image&lt;/h2&gt;&#10;&lt;h3 id="11-tự-build-image"&gt;1.1 Tự build image&lt;/h3&gt;&#10;&lt;p&gt;Các bạn co thể follow theo trang github này để tự build image: &lt;a href="https://github.com/csimmonds/android4beagle" target="_blank" rel="noopener"&gt;https://github.com/csimmonds/android4beagle&lt;/a&gt;&#10;&lt;/p&gt;</description></item><item><title>[Yocto-BBB] 17. Cài Links-X11, Lướt web trên core-image-sato</title><link>https://embeddedlinux.blog/2026/01/17/yocto-bbb-17-cai-links-x11-luot-web-tren-core-image-sato/</link><pubDate>Sat, 17 Jan 2026 06:34:00 +0700</pubDate><guid>https://embeddedlinux.blog/2026/01/17/yocto-bbb-17-cai-links-x11-luot-web-tren-core-image-sato/</guid><description>&lt;p&gt;Nọ mình cài Android 6 trên Beaglebone Black thì có thấy app Trình duyệt, nhưng không lướt được web. Với các board mới hơn như FRDM i.MX93 thì hỗ trợ tốt cho Chromium, nhưng chắc chắn yêu cầu phần cứng phải tốt hơn rất nhiều.&lt;/p&gt;</description></item><item><title>[STM32MP1] 1. Remoteproc : Nạp firmware core M4 từ core A7 Linux</title><link>https://embeddedlinux.blog/2026/01/10/stm32mp1-remoteproc-2-nap-firmware-core-m4-tu-core-a7-linux/</link><pubDate>Sat, 10 Jan 2026 07:06:00 +0700</pubDate><guid>https://embeddedlinux.blog/2026/01/10/stm32mp1-remoteproc-2-nap-firmware-core-m4-tu-core-a7-linux/</guid><description>&lt;h2 id="1-chuẩn-bị-elf-file-cho-core-m4"&gt;1. Chuẩn bị elf file cho core M4&lt;/h2&gt;&#10;&lt;p&gt;Các bạn chuẩn bị STM32IDE tải từ web của ST nhé &lt;a href="https://www.st.com/en/development-tools/stm32cubeide.html" target="_blank" rel="noopener"&gt;https://www.st.com/en/development-tools/stm32cubeide.html&lt;/a&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;Máy mình đang là Ubuntu nên sẽ khác. Đối với bài này thực tế vẫn đang là debug core M4 thôi, chưa liên quan gì đến remoteproc cả. Các bạn hoàn toàn có thể làm bài này trên máy Windows nhé, hoặc làm 1 cách tương tự với 1 board core Arm M4 khác&lt;/p&gt;</description></item><item><title>[Fun Fact] 1. Nguồn gốc của 1 số thuật ngữ trong lập trình</title><link>https://embeddedlinux.blog/2026/01/03/fun-fact-1-nguon-goc-cua-1-so-thuat-ngu-trong-lap-trinh/</link><pubDate>Sat, 03 Jan 2026 07:12:00 +0700</pubDate><guid>https://embeddedlinux.blog/2026/01/03/fun-fact-1-nguon-goc-cua-1-so-thuat-ngu-trong-lap-trinh/</guid><description>&lt;p&gt;Có bao giờ bạn thắc mắc tại sao mọi người lại dùng các thuật ngữ như &amp;quot;Core dumped&amp;quot;, &amp;quot;bug&amp;quot;, &amp;quot;mount&amp;quot;, &amp;quot;unmount&amp;quot;, &amp;quot;patch&amp;quot;, &amp;quot;cursor&amp;quot;.&lt;/p&gt;&#10;&lt;details class="md-details"&gt;&#10; &lt;summary&gt;Tại sao 'Core dumped' chứ không phải 'Memory Dumped'&lt;/summary&gt;&#10; &lt;div class="md-details-body"&gt;&lt;h4 id="core-dumped-diễn-ra-khi-nào-"&gt;Core dumped diễn ra khi nào ?&lt;/h4&gt;&#10;&lt;p&gt;Khi chương trình bị crash (ví dụ Segmentation Fault), hệ điều hành có thể chụp lại (snapshot) toàn bộ trạng thái Bộ nhớ của Process đó tại chính thời điểm crash:&lt;/p&gt;</description></item><item><title>[C-MCU] 2. Memory Layout trong chương trình C</title><link>https://embeddedlinux.blog/2025/12/27/c-mcu-memory-layout-function-call-stack/</link><pubDate>Sat, 27 Dec 2025 06:54:00 +0700</pubDate><guid>https://embeddedlinux.blog/2025/12/27/c-mcu-memory-layout-function-call-stack/</guid><description>&lt;p&gt;Ở bài trước, ta đã tìm hiểu về Build Process 1 chương trình code C, nay mình sẽ nói tiếp về Memory Layout (Các phân vùng trên bộ nhớ)&lt;/p&gt;&#10;&lt;h2 id="1-tổng-quan"&gt;1. Tổng quan&lt;/h2&gt;&#10;&lt;p&gt;&lt;figure class="md-img"&gt;&lt;img src="https://embeddedlinux.blog/uploads/2025/12/image-21.png" alt="" loading="lazy" decoding="async"&gt;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;Tương tự với bài trước, khi ta kiểm tra elf header bằng objdump với file object file, ta sẽ thấy (Đây là elf64-x86-64 sẽ có sự khác biệt nhất định với elf của MCU, mình sẽ nói kỹ hơn trên phần demo MCU sau)&lt;/p&gt;</description></item><item><title>[C-MCU] 1. Build Process chương trình code C</title><link>https://embeddedlinux.blog/2025/12/20/c-mcu-1-build-process-chuong-trinh-code-c/</link><pubDate>Sat, 20 Dec 2025 06:57:00 +0700</pubDate><guid>https://embeddedlinux.blog/2025/12/20/c-mcu-1-build-process-chuong-trinh-code-c/</guid><description>&lt;p&gt;Các bạn đã code 1 chương trình với ngôn ngữ C nhiều, nhưng đã bao giờ các bạn thắc mắc nó sẽ chạy những cái gì đằng sau trước khi ra được file executable sau cùng không. Hôm nay mình sẽ giải thích điều đó&lt;/p&gt;</description></item><item><title>[Yocto-STM32MP1] 2. Tạo patch device tree kernel, mở i2c</title><link>https://embeddedlinux.blog/2025/12/13/yocto-stm32mp1-2-tao-patch-device-tree-kernel-mo-i2c/</link><pubDate>Sat, 13 Dec 2025 07:18:00 +0700</pubDate><guid>https://embeddedlinux.blog/2025/12/13/yocto-stm32mp1-2-tao-patch-device-tree-kernel-mo-i2c/</guid><description>&lt;p&gt;Ở bài này mình sẽ hướng dẫn các bạn cách tạo patch device tree kernel, để enable i2c5 trên board&lt;/p&gt;&#10;&lt;h2 id="1-tài-liệu-và-phần-cứng"&gt;1. Tài liệu và phần cứng&lt;/h2&gt;&#10;&lt;p&gt;Các bạn đọc trong &lt;a href="https://www.st.com/resource/en/user_manual/um2534-discovery-kits-with-stm32mp157-mpus-stmicroelectronics.pdf" target="_blank" rel="noopener"&gt;User Manual&lt;/a&gt;&#10; của hãng, trang số 8 ta sẽ có Hardware block diagram, miêu tả các biểu đồ các kết nối hiện tại được kéo ra từ chip&lt;/p&gt;</description></item><item><title>[Yocto-STM32MP1] 1. Build và flash core-image-minimal cho STM32MP157</title><link>https://embeddedlinux.blog/2025/12/06/yocto-stm32mp1-1-build-va-flash-core-image-minimal-cho-stm32mp157/</link><pubDate>Sat, 06 Dec 2025 07:11:00 +0700</pubDate><guid>https://embeddedlinux.blog/2025/12/06/yocto-stm32mp1-1-build-va-flash-core-image-minimal-cho-stm32mp157/</guid><description>&lt;h2 id="1-chuẩn-bị-bên-máy-host"&gt;1. Chuẩn bị bên máy host&lt;/h2&gt;&#10;&lt;p&gt;Ở đây máy mình cài Ubuntu 22.04.5 LTS (Jammy Jellyfish). Mình cài dual boot với windows để tối ưu core&lt;/p&gt;&#10;&lt;p&gt;Dựa theo hướng dẫn bên &lt;a href="https://docs.yoctoproject.org/2.2.2/ref-manual/ref-manual.html#required-packages-for-the-host-development-system" target="_blank" rel="noopener"&gt;Yocto Project Reference Manual&lt;/a&gt;&#10; , mục 1.3.2.1. Ta cài các package sau&lt;/p&gt;</description></item><item><title>[Yocto-BBB] 16. Bật ADB, SSH Port-Forwarding</title><link>https://embeddedlinux.blog/2025/11/22/yocto-bbb-16-bat-adb-ssh-port-forwarding/</link><pubDate>Sat, 22 Nov 2025 06:46:00 +0700</pubDate><guid>https://embeddedlinux.blog/2025/11/22/yocto-bbb-16-bat-adb-ssh-port-forwarding/</guid><description>&lt;p&gt;ADB: Android Debug Bridge&lt;/p&gt;&#10;&lt;p&gt;Ở bài này, mình sẽ hướng dẫn với các bạn cách config để build image với ADB giúp cho việc truyền file qua USB thuận tiện hơn. Cũng như Port Forwarding, để ta có thể dùng ssh thông qua USB.&lt;/p&gt;</description></item><item><title>[Boot-BBB] 5. Tạo Beaglebone Black image với Buildroot</title><link>https://embeddedlinux.blog/2025/11/21/boot-bbb-5-tao-beaglebone-black-image-voi-buildroot/</link><pubDate>Fri, 21 Nov 2025 08:58:00 +0700</pubDate><guid>https://embeddedlinux.blog/2025/11/21/boot-bbb-5-tao-beaglebone-black-image-voi-buildroot/</guid><description>&lt;p&gt;Ở bài này minh sẽ hướng dẫn các bạn dùng Buildroot để tạo Beaglebone Black image. Các bạn hiểu đơn giản Buildroot tương tự như Yocto Project nhưng tinh giản hơn, ít cấu hình hơn vậy. Mục tiêu cuối cùng là build ra 1 custom embedded linux image&lt;/p&gt;</description></item><item><title>[Boot-BBB] 4. Tạo root filesystem thủ công với busybox</title><link>https://embeddedlinux.blog/2025/11/15/boot-bbb-4-tao-root-filesystem-thu-cong-voi-busybox/</link><pubDate>Sat, 15 Nov 2025 06:30:00 +0700</pubDate><guid>https://embeddedlinux.blog/2025/11/15/boot-bbb-4-tao-root-filesystem-thu-cong-voi-busybox/</guid><description>&lt;p&gt;Okay, bài hôm nay mình sẽ tiếp tục hướng dẫn các bạn cách tạo root filesystem thủ công, với các utility từ busybox (utilities ở đây được hiểu là các binary phục vụ cho command như &amp;quot;ls&amp;quot;,&amp;quot;cat&amp;quot;,...)&lt;/p&gt;&#10;&lt;p&gt;Kể cả với root filesystem (rfs) căn bản, ta vẫn cần tầm 50 comamnd.&lt;/p&gt;</description></item><item><title>[Boot-BBB] 3. Compile Linux Kernel và cấu hình tự động cho u-boot</title><link>https://embeddedlinux.blog/2025/11/08/boot-bbb-3-comiple-linux-kernel-va-cau-hinh-uboot-env/</link><pubDate>Sat, 08 Nov 2025 07:16:00 +0700</pubDate><guid>https://embeddedlinux.blog/2025/11/08/boot-bbb-3-comiple-linux-kernel-va-cau-hinh-uboot-env/</guid><description>&lt;p&gt;Ở bài trước ta đang dừng lại ở việc thiếu cấu hình u-boot. Bài này ta sẽ compile kernel và thêm file cấu hình uboot.env để khiến bootloader chạy ổn&lt;/p&gt;&#10;&lt;h2 id="1-fetch-kernel-code-và-compile"&gt;1. Fetch kernel code và Compile&lt;/h2&gt;&#10;&lt;h3 id="11-clone-source-code"&gt;1.1 Clone source code&lt;/h3&gt;&#10;&lt;div class="code-block is-term" translate="no" data-lang="bash" data-pagefind-weight="0.4"&gt;&#10; &lt;div class="code-head" data-pagefind-ignore&gt;&lt;span class="lang"&gt;bash&lt;/span&gt;&lt;button type="button" class="copy-btn" aria-label="Copy" data-copied="Đã copy"&gt;&lt;svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;rect x="9" y="9" width="11" height="11" rx="2"/&gt;&lt;path d="M5 15V5a2 2 0 012-2h10"/&gt;&lt;/svg&gt;&lt;span&gt;Copy&lt;/span&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre class="term"&gt;&lt;code&gt;&lt;span class="line"&gt;&lt;span class="t-c"&gt;git&lt;/span&gt; clone &lt;a class="t-u" href="https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux" target="_blank" rel="noopener"&gt;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux&lt;/a&gt;&lt;/span&gt;&#10;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;p&gt;Khá là lâu, nên các bạn đá miếng bánh, uống tí cà phê chill chill rồi quay lại check sau. Mình clone về check thì là 5,1 Gb&lt;/p&gt;</description></item><item><title>[Boot-BBB] 2. Compile U-boot và chạy test MLO, u-boot.img</title><link>https://embeddedlinux.blog/2025/11/01/boot-bbb-2-u-boot-1-build-va-chay-test-mlo-u-boot-img/</link><pubDate>Sat, 01 Nov 2025 09:18:00 +0700</pubDate><guid>https://embeddedlinux.blog/2025/11/01/boot-bbb-2-u-boot-1-build-va-chay-test-mlo-u-boot-img/</guid><description>&lt;p&gt;Ở bài này, mình sẽ hướng dẫn các bạn compile từ source của &lt;code&gt;u-boot&lt;/code&gt; và cấu hình cho board &lt;strong&gt;Beaglebone Black&lt;/strong&gt;. Về u-boot là gì, các bạn có thể đọc thêm tại &amp;lt;/2025/05/10/bbb-linux-3-beaglebone-black-boot-process-u-boot/&amp;gt;&lt;/p&gt;&#10;&lt;h2 id="1-clone-cấu-hình-và-compile-u-boot"&gt;1. Clone, cấu hình và compile u-boot&lt;/h2&gt;&#10;&lt;h3 id="11-clone-và-checkout"&gt;1.1 Clone và checkout&lt;/h3&gt;&#10;&lt;div class="code-block is-term" translate="no" data-lang="bash" data-pagefind-weight="0.4"&gt;&#10; &lt;div class="code-head" data-pagefind-ignore&gt;&lt;span class="lang"&gt;bash&lt;/span&gt;&lt;button type="button" class="copy-btn" aria-label="Copy" data-copied="Đã copy"&gt;&lt;svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;rect x="9" y="9" width="11" height="11" rx="2"/&gt;&lt;path d="M5 15V5a2 2 0 012-2h10"/&gt;&lt;/svg&gt;&lt;span&gt;Copy&lt;/span&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre class="term"&gt;&lt;code&gt;&lt;span class="line"&gt;&lt;span class="t-c"&gt;git&lt;/span&gt; clone &lt;a class="t-u" href="https://source.denx.de/u-boot/u-boot.git" target="_blank" rel="noopener"&gt;https://source.denx.de/u-boot/u-boot.git&lt;/a&gt;&lt;/span&gt;&#10;&lt;span class="line"&gt;&lt;span class="t-c"&gt;cd&lt;/span&gt; u-boot&lt;/span&gt;&#10;&lt;span class="line"&gt;&lt;span class="t-c"&gt;git&lt;/span&gt; checkout v2023.01&lt;/span&gt;&#10;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;p&gt;Mình &lt;code&gt;checkout&lt;/code&gt; v2023.01 bởi đó là phiên bản được sử dụng trong &lt;strong&gt;worklabs bootlin&lt;/strong&gt;, mang độ tương thích cao với &lt;code&gt;busybox&lt;/code&gt; và &lt;code&gt;buildroot&lt;/code&gt; trong cùng series&lt;/p&gt;</description></item><item><title>[Boot-BBB] 1. Build Cross compiler tool crosstool-ng</title><link>https://embeddedlinux.blog/2025/10/25/boot-bbb-1-build-cross-compiler-tool/</link><pubDate>Sat, 25 Oct 2025 08:03:00 +0700</pubDate><guid>https://embeddedlinux.blog/2025/10/25/boot-bbb-1-build-cross-compiler-tool/</guid><description>&lt;p&gt;Chào các bạn, hôm nay mình sẽ bắt đầu 1 series mới mang tên Boot-BBB. Series này sẽ độc lập với series Yocto-BBB. Ở đây mình sẽ không dùng đến yocto mà sẽ build từ source cho crosstool-ng, u-boot, buildroot, busybox.&lt;/p&gt;</description></item><item><title>[Yocto-BBB] 15. Thay đổi Boot Logo</title><link>https://embeddedlinux.blog/2025/10/18/yocto-bbb-15-thay-doi-boot-logo/</link><pubDate>Sat, 18 Oct 2025 09:25:00 +0700</pubDate><guid>https://embeddedlinux.blog/2025/10/18/yocto-bbb-15-thay-doi-boot-logo/</guid><description>&lt;p&gt;Okay, bài này mình sẽ hướng dẫn cách thay đổi &lt;strong&gt;Boot Logo&lt;/strong&gt; trên &lt;strong&gt;Beaglebone Black&lt;/strong&gt;. Ban đầu mình nghĩ sẽ là 1 cái phải tìm hiểu sâu. Nhưng thực tế cách thay đổi khá đơn giản. Và đấy cũng là 1 cái hay của &lt;code&gt;Linux&lt;/code&gt; khi đã hỗ trợ rất nhiều nhưng &lt;code&gt;Package&lt;/code&gt;. Việc của mình là mò ra cái cần dùng và ráp nó lại.&lt;/p&gt;</description></item><item><title>[Yocto-BBB] 14. X11 và RDP (Remote Desktop Protocol)</title><link>https://embeddedlinux.blog/2025/10/11/yocto-bbb-14-x11-va-rdp/</link><pubDate>Sat, 11 Oct 2025 09:13:00 +0700</pubDate><guid>https://embeddedlinux.blog/2025/10/11/yocto-bbb-14-x11-va-rdp/</guid><description>&lt;p&gt;Vì quá trình build Weston quá phức tạp rồi, và mình cũng có thử Weston + RDP không thành, nên mình sang X11 + RDP luôn cho đỡ phức tạp&lt;/p&gt;&#10;&lt;h2 id="1-lý-do-dùng-rdp"&gt;1. Lý do dùng RDP&lt;/h2&gt;&#10;&lt;p&gt;Mục tiêu của việc dùng &lt;code&gt;RDP&lt;/code&gt; (Remote Desktop Protocol) này là bạn hoàn toàn có thể truy cập từ xa tới board với giao diện giống như VNC vậy .&lt;/p&gt;</description></item><item><title>[Yocto-BBB] 13. Build weston, sửa lỗi input, dnd.</title><link>https://embeddedlinux.blog/2025/10/04/yocto-bbb-13-build-weston-sua-loi-input-dnd/</link><pubDate>Sat, 04 Oct 2025 12:15:29 +0700</pubDate><guid>https://embeddedlinux.blog/2025/10/04/yocto-bbb-13-build-weston-sua-loi-input-dnd/</guid><description>&lt;p&gt;Lúc bắt tay vào làm minh không nghĩ mình sẽ viết bài này, mà mình nghĩ sẽ làm bài &lt;strong&gt;RDP + Weston&lt;/strong&gt; luôn. Vì trên con &lt;code&gt;STM32MP157&lt;/code&gt; thì build cái được ngay, nhưng trên con &lt;strong&gt;Beaglebone Black&lt;/strong&gt; này, mình mất 2 ngày mới làm cho &lt;code&gt;Weston&lt;/code&gt; có vẻ hoạt động đúng được.&lt;/p&gt;</description></item><item><title>[Yocto-BBB] 12. Truyền file qua TFTP</title><link>https://embeddedlinux.blog/2025/09/27/yocto-bbb-12-truyen-file-qua-tftp/</link><pubDate>Sat, 27 Sep 2025 09:10:00 +0700</pubDate><guid>https://embeddedlinux.blog/2025/09/27/yocto-bbb-12-truyen-file-qua-tftp/</guid><description>&lt;p&gt;Bài trước mình đã hướng dẫn các bạn truyền file qua UART, bài này mình sẽ hướng dẫn các bạn cách truyền file qua TFTP. (u-boot có hỗ trợ TFTP để load file)&lt;/p&gt;&#10;&lt;h2 id="1-tftp-là-gì-"&gt;1. TFTP là gì ?&lt;/h2&gt;&#10;&lt;p&gt;TFTP (Trivial File Transfer Protocol) là một giao thức truyền tệp &lt;strong&gt;rất đơn giản&lt;/strong&gt;, hoạt động trên &lt;code&gt;UDP&lt;/code&gt; (port 69).&lt;/p&gt;</description></item><item><title>[Yocto-BBB] 11. Truyền file qua UART</title><link>https://embeddedlinux.blog/2025/09/20/yocto-bbb-11-truyen-file-qua-uart/</link><pubDate>Sat, 20 Sep 2025 09:25:00 +0700</pubDate><guid>https://embeddedlinux.blog/2025/09/20/yocto-bbb-11-truyen-file-qua-uart/</guid><description>&lt;p&gt;Ở bài này, mình sẽ hướng dẫn các bạn cách truyền file qua UART. Sẽ rất hữu dụng khi sắp tới ta học về quá trình Boot trên BBB cũng như u-boot.&lt;/p&gt;&#10;&lt;h2 id="1-lý-do"&gt;1. Lý do&lt;/h2&gt;&#10;&lt;p&gt;Cho đến giờ mình biết tới 1 số kiểu truyền file từ HOST sang board sau. Mình sẽ nêu ra ưu và nhược điểm của nó&lt;/p&gt;</description></item><item><title>[Yocto-BBB] 10. Boot từ eMMC</title><link>https://embeddedlinux.blog/2025/08/30/yocto-bbb-10-boot-from-emmc/</link><pubDate>Sat, 30 Aug 2025 08:40:00 +0700</pubDate><guid>https://embeddedlinux.blog/2025/08/30/yocto-bbb-10-boot-from-emmc/</guid><description>&lt;p&gt;Ở bài này mình sẽ hướng dẫn các bạn cách cấu hình để Beaglebone Black boot từ eMMC.&lt;/p&gt;&#10;&lt;h2 id="1-lý-do"&gt;1. Lý do&lt;/h2&gt;&#10;&lt;h3 id="11-emmc-là-gì-"&gt;1.1 eMMC là gì ?&lt;/h3&gt;&#10;&lt;p&gt;&lt;strong&gt;eMMC (embedded MultiMediaCard)&lt;/strong&gt; là một loại bộ nhớ lưu trữ tích hợp, kết hợp &lt;strong&gt;flash NAND&lt;/strong&gt; và &lt;strong&gt;bộ điều khiển&lt;/strong&gt; trên cùng một chip.&lt;/p&gt;</description></item><item><title>[Yocto-BBB] 9. Sử dụng devtool, tạo patch và cách cài file IPK</title><link>https://embeddedlinux.blog/2025/08/23/yocto-bbb-9-su-dung-devtool-tao-patch-va-file-ipk/</link><pubDate>Sat, 23 Aug 2025 08:52:00 +0700</pubDate><guid>https://embeddedlinux.blog/2025/08/23/yocto-bbb-9-su-dung-devtool-tao-patch-va-file-ipk/</guid><description>&lt;p&gt;Ở bài 5 về thêm driver cho &lt;strong&gt;USB wifi&lt;/strong&gt; mình đã từng hướng dẫn các bạn cách tạo &lt;code&gt;recipes&lt;/code&gt; thủ công để lấy code từ git về build. ở bài 8 vừa rồi, mình cũng có để code &lt;code&gt;main.c&lt;/code&gt; xử lý i2c trên git, tuy nhiên khi copy về board ta sẽ phải sửa lại &lt;code&gt;I2C_DEV&lt;/code&gt; và &lt;code&gt;I2C_ADDR&lt;/code&gt; cho đúng.&lt;/p&gt;</description></item><item><title>[Yocto-BBB] 8. Kết nối I2C với SSD1306 OLED 0.96 Inch</title><link>https://embeddedlinux.blog/2025/08/16/yocto-bbb-8-ket-noi-voi-ssd1306-oled-0-96-inch/</link><pubDate>Sat, 16 Aug 2025 08:05:00 +0700</pubDate><guid>https://embeddedlinux.blog/2025/08/16/yocto-bbb-8-ket-noi-voi-ssd1306-oled-0-96-inch/</guid><description>&lt;p&gt;Ở bài này mình sẽ hướng dẫn các bạn cách kết nối Beaglebone Black với màn SSD1306 cũng như tạo recipes để build program cho việc tương tác này. Dưới đây là cách kết nối&lt;/p&gt;&#10;&lt;p&gt;(Nếu các bạn gặp khó khăn trong quá trình thực hành theo blog, các bạn có thể tham khảo video thực hành của mình ở cuối bài )&lt;/p&gt;</description></item><item><title>[Yocto-BBB] 7. Thêm driver cho USB wifi</title><link>https://embeddedlinux.blog/2025/08/09/yocto-bbb-7-them-driver-cho-usb-wifi/</link><pubDate>Sat, 09 Aug 2025 08:15:00 +0700</pubDate><guid>https://embeddedlinux.blog/2025/08/09/yocto-bbb-7-them-driver-cho-usb-wifi/</guid><description>&lt;p&gt;Với các board không có sẵn module wifi như &lt;strong&gt;Beaglebone Black&lt;/strong&gt;, thì việc dùng 1 usb wifi là rất tiện so với việc cắm dây Ethernet. Ở bài này mình dùng mẫu USB wifi từ &lt;strong&gt;TP-Link WN722N&lt;/strong&gt; V2 khá phổ biến ở các shop Việt Nam&lt;/p&gt;</description></item><item><title>[Yocto-BBB] 6. SSH tới board qua Ethernet</title><link>https://embeddedlinux.blog/2025/08/02/yocto-bbb-6-ssh-toi-board-qua-ethernet/</link><pubDate>Sat, 02 Aug 2025 08:25:00 +0700</pubDate><guid>https://embeddedlinux.blog/2025/08/02/yocto-bbb-6-ssh-toi-board-qua-ethernet/</guid><description>&lt;p&gt;Tiếp tục bài 5, bài này mình sẽ hướng dẫn các bạn thêm package vào image để kết nối được Internet khi cắm Ethernet, từ đó SSH tới board, tiện cho việc lập trình sau này hơn.&lt;/p&gt;&#10;&lt;p&gt;(Nếu các bạn gặp khó khăn trong quá trình thực hành theo blog, các bạn có thể tham khảo video thực hành của mình ở cuối bài )&lt;/p&gt;</description></item><item><title>[Yocto-BBB] 5. Thay đổi banner sau khi đăng nhập</title><link>https://embeddedlinux.blog/2025/07/26/yocto-bbb-5-thay-doi-banner-sau-khi-dang-nhap/</link><pubDate>Sat, 26 Jul 2025 09:37:00 +0700</pubDate><guid>https://embeddedlinux.blog/2025/07/26/yocto-bbb-5-thay-doi-banner-sau-khi-dang-nhap/</guid><description>&lt;p&gt;Mục tiêu của chúng ta sau bài này là sau khi đăng nhập ta sẽ hiện ra màn hình như sau&lt;/p&gt;&#10;&lt;p&gt;(Nếu các bạn gặp khó khăn trong quá trình thực hành theo blog, các bạn có thể tham khảo video thực hành của mình ở cuối bài )&lt;/p&gt;</description></item><item><title>[Yocto-BBB] 4. Thay đổi Distro Description</title><link>https://embeddedlinux.blog/2025/07/19/yocto-bbb-4-thay-doi-distro-description/</link><pubDate>Sat, 19 Jul 2025 09:21:00 +0700</pubDate><guid>https://embeddedlinux.blog/2025/07/19/yocto-bbb-4-thay-doi-distro-description/</guid><description>&lt;p&gt;Như bài trước đã nói, mục tiêu của bài này mình sẽ thay đổi distro description từ &amp;quot;Poky (Yocto Project Reference Distro)&amp;quot; sang dòng hiển thị custom theo cá nhân&lt;/p&gt;&#10;&lt;h2 id="thay-đổi-distro-description"&gt;Thay đổi Distro Description&lt;/h2&gt;&#10;&lt;p&gt;Đầu tiên ta tìm xem, vậy trong repo poky, dòng chữ này được chứa trong file nào sau khi build xong image&lt;/p&gt;</description></item><item><title>[Yocto-BBB] 3. Thêm mật khẩu cho User</title><link>https://embeddedlinux.blog/2025/07/12/yocto-bbb-3-them-mat-khau-cho-user/</link><pubDate>Sat, 12 Jul 2025 09:38:00 +0700</pubDate><guid>https://embeddedlinux.blog/2025/07/12/yocto-bbb-3-them-mat-khau-cho-user/</guid><description>&lt;p&gt;Ở 2 bài trước, ta đang không cài mật khẩu cho user root. Đến bài này mình sẽ thêm mật khẩu (do không có sudo, nên thêm cho root luôn :v)&lt;/p&gt;&#10;&lt;p&gt;(Nếu các bạn gặp khó khăn trong quá trình thực hành theo blog, các bạn có thể tham khảo video thực hành của mình ở cuối bài )&lt;/p&gt;</description></item><item><title>[Yocto-BBB] 2. UART Debug Board và Bitbake Append</title><link>https://embeddedlinux.blog/2025/07/05/yocto-bbb-2-uart-debug-board/</link><pubDate>Sat, 05 Jul 2025 08:04:00 +0700</pubDate><guid>https://embeddedlinux.blog/2025/07/05/yocto-bbb-2-uart-debug-board/</guid><description>&lt;p&gt;Ở bài trước, chúng ta đã build thành công core-minimal-image ở bài này mình sẽ tiếp tục với việc kết nối uart debug và ôn lại về bitbake append&lt;/p&gt;&#10;&lt;p&gt;(Nếu các bạn gặp khó khăn trong quá trình thực hành theo blog, các bạn có thể tham khảo video thực hành của mình ở cuối bài )&lt;/p&gt;</description></item><item><title>[Yocto-BBB] 1. Build Beaglebone Black Image Bằng Yocto Project</title><link>https://embeddedlinux.blog/2025/06/28/yocto-bbb-1-build-beaglebone-black-image-bang-yocto-project/</link><pubDate>Sat, 28 Jun 2025 17:54:46 +0700</pubDate><guid>https://embeddedlinux.blog/2025/06/28/yocto-bbb-1-build-beaglebone-black-image-bang-yocto-project/</guid><description>&lt;p&gt;Bắt đầu series về build bủng bằng Yocto thôi, bài đầu sẽ về build cho Beaglebone Black.&lt;/p&gt;&#10;&lt;p&gt;(Nếu các bạn gặp khó khăn trong quá trình thực hành theo blog, các bạn có thể tham khảo video thực hành của mình ở cuối bài )&lt;/p&gt;</description></item><item><title>[Yocto-BBB] 0. Lý thuyết, Tài liệu, và câu lệnh thường dùng trong Series Yocto</title><link>https://embeddedlinux.blog/2025/06/27/yocto-bbb-0-ly-thuyet-tai-lieu-va-cau-lenh-thuong-dung-trong-series-yocto/</link><pubDate>Fri, 27 Jun 2025 09:26:00 +0700</pubDate><guid>https://embeddedlinux.blog/2025/06/27/yocto-bbb-0-ly-thuyet-tai-lieu-va-cau-lenh-thuong-dung-trong-series-yocto/</guid><description>&lt;p&gt;Khi thực hành theo các bài trong series, có những câu lệnh mình thường dùng, có 1 số lý thuyết có thể dễ quên, và 1 số tài liệu phụ. Ở bài này mình sẽ tổng hợp lại để cho các bạn dễ theo dõi, làm theo hơn .&lt;/p&gt;</description></item><item><title>[BBB-Linux] 1. Beaglebone Black Boot Process Overview</title><link>https://embeddedlinux.blog/2025/06/21/bbb-linux-1-beaglebone-black-boot-process-overview/</link><pubDate>Sat, 21 Jun 2025 08:51:00 +0700</pubDate><guid>https://embeddedlinux.blog/2025/06/21/bbb-linux-1-beaglebone-black-boot-process-overview/</guid><description>&lt;p&gt;&lt;figure class="md-img"&gt;&lt;img src="https://embeddedlinux.blog/uploads/blogger/043d800bc825.jpg" alt="" loading="lazy" decoding="async"&gt;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;Tổng quan sẽ gồm 5 giai đoạn theo mô tả trên hình, ta đi vào sâu hơn về từng giai đoạn&lt;/p&gt;&#10;&lt;h2 id="1-soc-rom-bootloader"&gt;1. SoC ROM Bootloader&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;RBL (ROM Bootloader): cái này sẽ do bên vendor, hay bên sản xuất board code, không thể thay thế được nội dung&lt;/li&gt;&#10;&lt;li&gt;Đây là đoạn code đầu tiên sẽ chạy khi mở board lên&lt;/li&gt;&#10;&lt;li&gt;Nhiệm vụ chính là để chạy khối tiếp theo First Stage Bootloader (SPL/MLO)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="2-first-stage-bootloader-splmlo"&gt;2. First Stage Bootloader (SPL/MLO)&lt;/h2&gt;&#10;&lt;p&gt;SPL: Secondary Program Loader&lt;/p&gt;</description></item><item><title>[OrangePi] Fix lỗi màn MPI3501 TFT 3.5 inch lên màu không chuẩn</title><link>https://embeddedlinux.blog/2025/06/17/orangepi-fix-loi-man-mpi3501-tft-3-5-inch-len-mau-khong-chuan/</link><pubDate>Tue, 17 Jun 2025 15:25:00 +0000</pubDate><guid>https://embeddedlinux.blog/2025/06/17/orangepi-fix-loi-man-mpi3501-tft-3-5-inch-len-mau-khong-chuan/</guid><description>&lt;p&gt;Mình có con board Orange pi zero 2w, có thể coi là 1 phiên bản hiệu năng cao mà lại rẻ hơn Raspberry Pi Zero 2w. Đánh đổi của nó là ít tài liệu và thiếu support hơn. Mình nhận ra sâu sắc điều này hơn khi gặp vấn đề màn hình chạy trên board hiển thị màu không đúng&lt;/p&gt;</description></item><item><title>[Linux] Cấu hình chuột Logitech bằng Bash Scripts</title><link>https://embeddedlinux.blog/2025/05/24/linux-cau-hinh-chuot-logitech-bang-bash-scripts/</link><pubDate>Sat, 24 May 2025 08:27:00 +0000</pubDate><guid>https://embeddedlinux.blog/2025/05/24/linux-cau-hinh-chuot-logitech-bang-bash-scripts/</guid><description>&lt;p&gt;Mỗi ngày mò học thêm 1 tí trên Linux. Bình thường con chuột Logitech G402 của mình chạy trên Windows thì có thể dùng G Hub để cấu hình, tuy nhiên trên Ubuntu hiện tại thì chưa được support. Mình thì rất hay nghe nhạc, và thường hay để 2 trong 5 phím sườn là tăng giảm âm lượng, nay rảnh rảnh thử ngồi nghiên cứu tí. Cụ thể là Key 5 là tăng, Key 4 là giảm.&lt;/p&gt;</description></item><item><title>[BBB-Linux] 3. Beaglebone Black Boot Process - U-boot</title><link>https://embeddedlinux.blog/2025/05/10/bbb-linux-3-beaglebone-black-boot-process-u-boot/</link><pubDate>Sat, 10 May 2025 11:16:00 +0000</pubDate><guid>https://embeddedlinux.blog/2025/05/10/bbb-linux-3-beaglebone-black-boot-process-u-boot/</guid><description>&lt;p&gt;Tiếp tục với Boot Process trên BBB đó là u-boot&lt;/p&gt;&#10;&lt;p&gt;&lt;figure class="md-img"&gt;&lt;img src="https://embeddedlinux.blog/uploads/blogger/b2740fa3dded.png" alt="" loading="lazy" decoding="async"&gt;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;h2 id="1-u-boot-là-gì-"&gt;1. U-boot là gì ?&lt;/h2&gt;&#10;&lt;p&gt;&lt;strong&gt;U-Boot (Universal Boot Loader)&lt;/strong&gt; là một trình nạp khởi động mã nguồn mở, đóng vai trò quan trọng trong các hệ thống nhúng sử dụng Linux. Nó chịu trách nhiệm khởi tạo phần cứng cơ bản và chuyển quyền điều khiển cho nhân hệ điều hành. Nhờ khả năng tương thích với nhiều nền tảng như ARM, x86 hay PowerPC, U-Boot được ứng dụng rộng rãi trong phát triển phần mềm nhúng. Ngoài ra, nó còn cho phép cấu hình môi trường hệ thống trước khi kernel được thực thi, góp phần đảm bảo quá trình khởi động diễn ra ổn định và linh hoạt.&lt;/p&gt;</description></item><item><title>[BBB-Linux] 3.1 Tại sao cần có Device Tree ?</title><link>https://embeddedlinux.blog/2025/05/10/bbb-linux-3-1-tai-sao-can-co-device-tree/</link><pubDate>Sat, 10 May 2025 11:16:00 +0000</pubDate><guid>https://embeddedlinux.blog/2025/05/10/bbb-linux-3-1-tai-sao-can-co-device-tree/</guid><description>&lt;p&gt;&lt;figure class="md-img"&gt;&lt;img src="https://embeddedlinux.blog/uploads/blogger/30b8446785db.png" alt="" loading="lazy" decoding="async"&gt;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;Trên 1 Board sẽ có rất nhiều ngoại vi, tuy nhiên khi OS đi vào hoạt động thì bản thân nó không thể nhận biết được các ngoại vi on-board, ngoại trừ USB (có cơ chế Self Discoverable). Đó là lý do cần có 1 file code để định nghĩa các ngoại vi trên board.&lt;/p&gt;</description></item><item><title>[BBB-Linux] 2. Beaglebone Black Boot Process - RBL, SPL</title><link>https://embeddedlinux.blog/2025/05/08/bbb-linux-2-beaglebone-black-boot-process-rbl-spl/</link><pubDate>Thu, 08 May 2025 15:29:00 +0000</pubDate><guid>https://embeddedlinux.blog/2025/05/08/bbb-linux-2-beaglebone-black-boot-process-rbl-spl/</guid><description>&lt;p&gt;&lt;figure class="md-img"&gt;&lt;img src="https://embeddedlinux.blog/uploads/2025/05/image-3.png" alt="" loading="lazy" decoding="async"&gt;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;Bài này sẽ tìm hiểu kỹ hơn về quá trình RBL (ROM Bootloader) và SPL (Secondary Program Loader) mình đã nói qua ở bài 1.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Ti AM335x CPU diagram&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;figure class="md-img"&gt;&lt;img src="https://embeddedlinux.blog/uploads/2025/05/image-4.png" alt="" loading="lazy" decoding="async"&gt;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;h2 id="1-rbl-rom-bootloader"&gt;1. RBL (ROM Bootloader)&lt;/h2&gt;&#10;&lt;p&gt;Như ảnh ở trên ta có cấu trúc AM3359 SoC, phần chip chính gồm&lt;/p&gt;</description></item><item><title>[Android]4. Cách đổi Boot animation Android 15 Raspberry Pi 4</title><link>https://embeddedlinux.blog/2025/05/05/android4-cach-doi-boot-animation-android-15-raspberry-pi-4/</link><pubDate>Mon, 05 May 2025 15:16:00 +0000</pubDate><guid>https://embeddedlinux.blog/2025/05/05/android4-cach-doi-boot-animation-android-15-raspberry-pi-4/</guid><description>&lt;p&gt;*Về cách build Android 15 mình tham khảo tại &lt;a href="https://devlinux.vn/blog/X%C3%A2y-d%E1%BB%B1ng-Android-Automotive-15-cho-Raspberry-Pi-4" target="_blank" rel="noopener"&gt;Devlinux.vn blog Xây dựng Android Automotive 15 cho Raspberry Pi 4&lt;/a&gt;&#10;*&lt;em&gt;Lưu ý duy nhất khi áp dụng guide này là đến bước 3.1 repo init, thì phải dùng lệnh (thay revision)&lt;/em&gt;&lt;/p&gt;</description></item><item><title>[Android]3. Cách Kết nối vào Raspberry Pi 4 dùng SSH</title><link>https://embeddedlinux.blog/2025/04/22/android3-cach-ket-noi-vao-raspberry-pi-4-dung-ssh/</link><pubDate>Tue, 22 Apr 2025 15:18:00 +0000</pubDate><guid>https://embeddedlinux.blog/2025/04/22/android3-cach-ket-noi-vao-raspberry-pi-4-dung-ssh/</guid><description>&lt;p&gt;Tham khảo tại  &lt;a href="https://gist.github.com/raveenb/ab3217798c827be889b83b584d70b08b" target="_blank" rel="noopener"&gt;https://gist.github.com/raveenb/ab3217798c827be889b83b584d70b08b&lt;/a&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;&lt;figure class="md-img"&gt;&lt;img src="https://embeddedlinux.blog/uploads/blogger/fb975454d7f4.jpg" alt="" loading="lazy" decoding="async"&gt;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;\&lt;/p&gt;&#10;&lt;h3 id="1-chuẩn-bị-bên-host"&gt;1. Chuẩn bị bên host&lt;/h3&gt;&#10;&lt;p&gt;Kết nối được adb vào board, tham khảo &lt;a href="https://zk47t.blogspot.com/2025/04/android2-cach-ket-noi-vao-raspberry-pi.html" target="_blank" rel="noopener"&gt;[Android]2. Cách Kết nối vào Raspberry Pi 4 dùng ADB (Android Debugger Bridge)&lt;/a&gt;&#10;Tải termux.apk để sử dụng terminal trên board tại đây &lt;a href="https://termux.en.download.it/android" target="_blank" rel="noopener"&gt;https://termux.en.download.it/android&lt;/a&gt;&#10;&lt;br&gt;&#10;Tại host gõ&lt;/p&gt;</description></item><item><title>[Android]2. Cách Kết nối vào Raspberry Pi 4 dùng ADB (Android Debugger Bridge)</title><link>https://embeddedlinux.blog/2025/04/22/android2-cach-ket-noi-vao-raspberry-pi-4-dung-adb-android-debugger-bridge/</link><pubDate>Tue, 22 Apr 2025 15:00:00 +0000</pubDate><guid>https://embeddedlinux.blog/2025/04/22/android2-cach-ket-noi-vao-raspberry-pi-4-dung-adb-android-debugger-bridge/</guid><description>&lt;h3 id="1-chuẩn-bị-bên-host"&gt;1. Chuẩn bị bên Host&lt;/h3&gt;&#10;&lt;p&gt;&lt;figure class="md-img"&gt;&lt;img src="https://embeddedlinux.blog/uploads/blogger/db032521f065.jpg" alt="" loading="lazy" decoding="async"&gt;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;&lt;br&gt;&#10;Chắc chắn rồi, phải cài adb trên máy tính đầu tiên. Có 2 cách 1 là bạn cài zip, 2 là sẽ cài package sử dung apt luôn. Mình theo cách thứ 2&lt;em&gt;sudo apt install adb&lt;/em&gt;Sau khi cài xong verify bằng&lt;em&gt;adb version&lt;/em&gt;&lt;/p&gt;</description></item><item><title>[Android]1. Cách build android 13 cho Raspberry Pi 4</title><link>https://embeddedlinux.blog/2025/04/22/android1-cach-build-android-13-cho-raspberry-pi-4/</link><pubDate>Tue, 22 Apr 2025 14:29:00 +0000</pubDate><guid>https://embeddedlinux.blog/2025/04/22/android1-cach-build-android-13-cho-raspberry-pi-4/</guid><description>&lt;p&gt;Mình tham khảo hướng dẫn build từ blog của anh Phú &lt;a href="https://vinalinux.com.vn/2024/08/01/xay-dung-android-13-cho-raspberry-pi-4/" target="_blank" rel="noopener"&gt;https://vinalinux.com.vn/2024/08/01/xay-dung-android-13-cho-raspberry-pi-4/&lt;/a&gt;&#10;. Các bước làm theo y hệt, note tại đây về 1 số lỗi khi build mình gặp.&lt;/p&gt;&#10;&lt;p&gt;&lt;figure class="md-img"&gt;&lt;img src="https://embeddedlinux.blog/uploads/blogger/1a72833b2a86.jpg" alt="" loading="lazy" decoding="async"&gt;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;Mình dùng máy thật cài đặt Ubuntu 22.04, tuy nhiên hoàn toàn có thể  sử dụng máy ảo như Virtual box hoặc VM Ware (nếu dùng máy ảo sẽ được ít cores build hơn, nên sẽ tốn thời gian hơn )\&lt;/p&gt;</description></item><item><title>Cách cài đặt gcc trên Windows và Ubuntu</title><link>https://embeddedlinux.blog/2024/10/19/cach-cai-dat-gcc-tren-windows-va-ubuntu/</link><pubDate>Sat, 19 Oct 2024 02:25:00 +0000</pubDate><guid>https://embeddedlinux.blog/2024/10/19/cach-cai-dat-gcc-tren-windows-va-ubuntu/</guid><description>&lt;h2 id="1-gcc-là-gì-"&gt;1. GCC là gì ?&lt;/h2&gt;&#10;&lt;p&gt; GCC là một &lt;strong&gt;trình biên dịch&lt;/strong&gt;. Nó là một bộ công cụ biên dịch mạnh mẽ được sử dụng rộng rãi để biên dịch mã nguồn từ các ngôn ngữ lập trình như &lt;code&gt;C&lt;/code&gt;, &lt;code&gt;C++&lt;/code&gt;, &lt;code&gt;Objective-C&lt;/code&gt;.., và nhiều ngôn ngữ khác thành mã máy (mã nhị phân có thể thực thi trên hệ điều hành).&lt;/p&gt;</description></item><item><title>Sử dụng GCC biên dịch C/C++</title><link>https://embeddedlinux.blog/2024/10/19/su-dung-gcc-bien-dich-c-c/</link><pubDate>Sat, 19 Oct 2024 02:08:00 +0000</pubDate><guid>https://embeddedlinux.blog/2024/10/19/su-dung-gcc-bien-dich-c-c/</guid><description>&lt;h2 id="gcc-là-gì"&gt;GCC là gì?&lt;/h2&gt;&#10;&lt;p&gt;GCC là một &lt;strong&gt;trình biên dịch&lt;/strong&gt; (compiler). Nó là bộ công cụ biên dịch mạnh mẽ, được dùng rộng rãi để biên dịch mã nguồn từ các ngôn ngữ như C, C++, Objective-C… và nhiều ngôn ngữ khác thành mã máy (mã nhị phân có thể thực thi trên hệ điều hành).&lt;/p&gt;</description></item></channel></rss>