Category Archives: Embedded

Ampere Altra Mt. Jade OpenBMC build guide on ARM64 platform

Ampere announce Altra CPU, it’s a 80 cores ARM64v8 CPU for cloud native workloads. Altra Max CPU is 128 cores. Follow the CPU, Ampere also has a CRB (customer reference board) named Mt. Jade, and Ampere also open source OpenBMC and EDKII source code for Mt. Jade platform.

This article is personal note, all information can be found from internet. And open source project keeps going, it might be some minor differences when you find this article.

Read more »

embedded system btrfs

這一篇是 btrfs 用在 embedded system 的開發測試上會用到的指令.
Read more »

[跟風] 程式設計師, 你調試過最難的 BUG

看到一篇文章
簡體中文翻譯: 程序员,你调试过的最难的 Bug 是?
原文: What’s the hardest bug you’ve debugged?

看原文比翻譯好一點, 從原文大概只可能猜出, 改過 timer 之後, 可能影響到 interrupt 的速度.
但是從最後的描述猜也可能是動到 clock tree 去影響 timer 進而影響到其他的行為.
有碰到這種 BUG 的第一個一定先猜 timing , 純軟體的反而不會這樣想, 所以他覺得最難的 BUG
我們看起來就還好.

這個描述讓我也想寫一下, 我碰過最難的 BUG.
Read more »

kernel rootwait option

之前都不知道 Linux kernel 有 rootwait option, 比 rootdelay=? 好用多了.

尤其是用 usb or mmc 之類的 device 當作 root, 常用於 embedded system .
(其實我也少用, 都混 IC vendor , rootwait 這種東西就交給系統廠去處理).

Example Command
[TEXT]
CONFIG_CMDLINE=”root=/dev/mmcblk0p1 rw init=/sbin/init mem=256M console=ttyS0,38400 rootwait”
[/TEXT]

STM32 的 USB DFU (Device Firmware Upgrade)

當用 STM32 (我用的是 Coretex-M 的 STM32F103ZC) 時, 如果沒有 ICE, 可以用 DFU 從 USB 切入 DFU Mode, 再用 USB 的軟體升級程式.

我不小心弄掛我系統的 DFU, 這邊稍稍講一下如何救回來
* 還是需要 ICE 的.
Read more »

Cortex-Mx STM32: Virtual COM port in Win7

如果在 Win7 下使用 Virtual Com port, 會有抓不到的狀況, 請使用這個 STM32 Virtual COM port Driver

ref.
Cortex-Mx STM32: Virtual COM port in Win7 or Vista 32-bit

[ARM][Linux] 建立 ARM 平台的 Debian System

在 Embedded system 下, 使用現有的系統驗證 SoC 功能是非常棒的.
最大的好處就是不用到處找工具編一堆有的沒有的, 時間可以花在更重要的地方

像我將 debian 裝好之後, 就可以跑 wireshark 了

本圖中, 最左邊的是 console, 中間的視窗是 EVB 上的 wireshark, 右邊的視窗是 PC 端的 wireshark
使用 wireshark *2 debug tcp stream

真是超好用的……

Read more »

ARM 的 Oprofile

最近在弄 ARM11 的 Oprofile, 結果發現執行 opcontrol 的動作之後, 沒有 log 的動作.
大致上的訊息是這樣的
[Bash]
# opcontrol –shutdown
Stopping profiling.
Killing daemon.
# Stopping profiling.
Killing daemon.
opreport image:/vmlinux -l -w -g > oprofile.txt
error: no sample files found: profile specification too strict ?
[/Bash]

這時請改用 timer interrupt

在 load oprofile modules 加上 timer=1
若是 static link 時, 就要在 boot_cmd 加上 oprofile.timer=1

似乎目前的 kernel oprofile 不支援 ARM11MPCore.

http://oprofile.sourceforge.net/doc/detailed-parameters.html#timer

[Linux][Kernel][Memory] smbd: page allocation failure. order:2, mode:0x20

如果啟動了 Jumbo Frame 加上執行 Samba , 有可能會出現類似的訊息(系統抓下來似乎有點不全)

Read more »

ARMv6 的 Word Swap 指令

ARMv6 加入了幾個好用的 Swap 指令. 不需要用軟體算來算去
請參考 http://www.arm.com/pdfs/ARMv6_Architecture.pdf

REV
REV16
REVSH

ARM_REV

最常用的應該是 REV 吧.

Realview inline assembly 很簡單.

[C]unsigned int tmp = 0x12345678;
__asm{
REV tmp, tmp
}[/C]

GNU C++ inline assembly 為(未測)

[C]
unsigned int tmp = 0x12345678;
__asm__ __volatile__ (
“REV %0,%0;” : “=r”(tmp) : “r”(tmp):”r5”);
);[/C]