「探索嵌入式 ARM 平台與 SoC 」Part I 簡報上線
上週六應 Study-Area 台北的邀請,進行主題為 [
探索嵌入式 ARM 平台與 SoC ] 的演講/教育訓練,雖然主題較為冷僻,但前來指教的朋友們,還是將訓練教室塞滿,在此,相當感謝捧場與指導。目前簡報已上線,請參考以下連結:
仿造過去 [
深入淺出 Hello World] 系列演講的模式,只要行有餘力,小弟將循序探討 ARM 架構與 SoC 的概念和實務,當然,這一切的演講/教育訓練,都維持免費且開放,只要您願意提出意見,我們可隨時調整方向與探討的細節。誠如前文提到的訓練宗旨:
「探討如何從零到有設計完整的作業系統、如何進行必要的系統初始化、如何動手理解 ARM 的種種關鍵設計,且從軟體設計師的角度去切入」
在這個 "Everything goes mobile" 的時代,我們更在意知識的累積與多元轉換,可惜台灣人的工作環境,不免會基於某些考量,發生專業技能的「藏私」狀況,或多或少限制了視野的廣度與專業的深度。希望就能如去年在 [
自由軟體教育訓練與演講規劃] 一文提到的項目,循序漸進分享與接受各方的指教,從而累積資訊技術知識。
此次 Part I 課程回顧:
- ARM 架構
- Architecture version vs. Implementation
- ISA feature
- ARM SoC 平台
- 整合多種不同功能的複雜IC 組合,針對特定的市場或應用需求
- 典型組成
- 關鍵概念
而關於系列演講的 Part II,預定提綱針對系統控制,涵蓋以下:
- ARM 定址與組合語言
- PXA255 SoC 與 CuRT 的硬體啟動程序
- ARM Interrupt, ISR, Exception的處理,解析 PSR
期待您的指教與討論,您的付出與關注,將使這一切變得更好,謝謝!
由 jserv 發表於
04:02 PM
|
迴響 (8)
隱藏式取得動態函式庫的 C 函式實做
前文 [
dlopen 的 _init 與 _fini] 與 [
LD_PRELOAD 的應用] 提過 GNU/Linux 下,動態函式庫操作的技巧,可看到 dlopen(3), dlsym 搭配 _init/_fini 或自訂函式,達到攔截函式進入點的功能。那麼,是否能提供「隱藏式」的機制,讓原始程式碼不甚明顯,但執行時期也有同等功效呢?本文就要探討這樣的技巧。
實驗的目標是動態載入 libm.so 裡頭的 exp() 函式,並計算 e 的值,也就是呼叫 exp(1.0),這部份實做於 lookup(),有趣的是以下程式碼列表的 do_magic() 函式: (findsym.c)
#include <stdio.h>
#include <dlfcn.h>
extern void payload();
typedef double (*proto)(double);
proto _exp = (proto) (void *) &payload;
/* once no exp found, use this */
static double failback(double x) { return 0.0; }
static void lookup()
{
void *handle = dlopen("libm.so", RTLD_LAZY);
if (!handle) {
fprintf(stderr, "E: unable to load libm\n" );
_exp = (proto) (void *) &failback;
return;
}
_exp = (proto) dlsym(handle, "exp");
if (!_exp) {
dlclose(handle);
_exp = (proto) (void *) &failback;
fprintf(stderr, "E: unable to find exp\n");
}
}
static void do_magic() {
__asm__ __volatile__ (
" .section .bss\n"
" .align 4\n"
"external_ebp: .type external_ebp, @object\n"
" .size external_ebp, 4\n"
" .text\n"
"payload:\n"
" mov %ebp, external_ebp\n"
" mov %esp, %ebp\n"
" call lookup\n"
" mov external_ebp, %ebp\n"
" jmp *_exp\n"
); }
int main()
{
printf("e = %f\n", _exp(1.0));
return 0;
}
透過調整 IA32 stack 的 %ebp,將變數 _exp 指向由 dlopen + dlsym 找出的 libm::exp() 位址,進一步跳躍到函式進入點,達到所設立的目標。參考的編譯與執行輸出:
$ gcc -o findsym{,.c} -O0 -ldl && ./findsym
e = 2.718282
由 jserv 發表於
05:43 PM
|
迴響 (2)
演講:探索嵌入式 ARM 平台與 SoC
七月份,小弟將應 [
Study-Area] 之邀,給予一場新的教育訓練,主題為「探索嵌入式 ARM 平台與 SoC 」,嘗試實現過去的一個小心願:以淺顯又直觀的方式,去探討 ARM architecture,以下是該議程相關資訊:
- 議程簡介:雖然 ARM 嵌入式平台早已充斥於我們的日常生活,舉凡手機、導航系統等電子產品,但探討其原理架構的課程,往往有如英文諺語 "an arm and a leg" 背後的意思一般,所費不貲。講者嘗試整理過去幾年開發的心得,以心得分享的方式,免費介紹 ARM 硬體特性與原理,並以一個具體而微的 RTOS 開發,作為探索架構與軟體驗證的對象。
- 建議聽者背景: (任一)
- 已熟悉 C 語言程式設計,並參與過 ARM 平台軟體移植者
- 對 ARM/RISC 架構開發有興趣者
- 覺得只要有心,什麼都不是問題的熱血人士
- 預定提綱:
- ARM7/ARM9/ARM11 硬體架構快速瀏覽
- ARM SoC 平台
- 關鍵概念: 工作模式、暫存器組、系統狀態、指令集、例外處理、啟動程序
- 作中學:從軟體工程師的角度去思考硬體行為
- 時間:2009 年 07 月 18 日 (星期六)
- 上午 09:00~12:00
- 下午 13:30~17:00
- 時間規劃: 6.5 hr
- 地點:國立臺灣大學進修推廣部 - 304教室 (台北市羅斯福路四段107號,此地點位於羅斯福路上靠近基隆路口)
前文 [
解析 CuRT 與嵌入式系統設計] 與 [
CuRT - 精簡易懂的 RTOS] 曾提及舉辦免費 ARM 系統設計的想法,探討如何從零到有設計完整的作業系統、如何進行必要的系統初始化、如何動手理解 ARM 的種種關鍵設計。而從軟體設計師的角度,若能適時點出架構的特性,相信是個不錯的切入點,系統程式設計該是多麼有意思呢?關於本議程的討論與意見提交,請多利用 Study-Area 的論壇 [
2009 七月份的 SA@Taipei - 探索嵌入式 ARM 平台與 SoC (07/18) ],期待您的指教,謝謝!
由 jserv 發表於
12:34 AM
|
迴響 (2)
COSCUP 2009 即將到來

一年一度的 [
COSCUP / 開源人年會] 即將於八月 15 與 16 兩日舉辦,在台灣各地社群共同舉辦之下,逐漸成長茁壯。今年大會有四個主題:
- Android 和嵌入式系統
- 雲端運算和 Web 技術
- 開發者工具
- 使用者桌面
據聞,因為講題投稿相當踴躍,主辦單位仍在思量,想必也如過往一般精彩可期。本次 [
0xlab] 很榮幸能成為
COSCUP 贊助單位,並分享若干議程,涵蓋 Android 3D、Embedded 開發,與 Linux virtualization 等等。期待您的蒞臨指教,謝謝!
由 jserv 發表於
10:44 AM
|
迴響 (0)