steps:
1. 從 http://sourceforge.net/projects/strace/files/strace/ 下載strace source code, 目前最新版為4.5.20 (strace-4.5.20.tar.bz2)
2. tar -jxv -f strace-4.5.20.tar.bz2
3. ./configure --host=arm-linux CC=arm-linux-gcc LD=arm-linux-ld , 配置makefile
4. make CFLAGS="-static" , 產生靜態可執行檔
5. (可做可不做) arm-linux-strip strace , 縮減strace的size
完成, 之後就可以把strace copy到ARM 的 linux平台上執行了
- Jan 15 Wed 2014 16:48
建構strace for ARM
- Jan 14 Tue 2014 11:29
重要的Linux系統核心檔案介紹
在網路中,不少伺服器使用的是Linux系統。為了進一步提高伺服器的效能,可能需要根據特定的硬體及需求重新編譯Linux核心。編譯Linux核心,需要根據規定的步驟進行,編譯核心過程中涉及到幾個重要的檔案。比如對於RedHat Linux,在/boot目錄下有一些與Linux核心有關的檔案。編譯過RedHat Linux核心的人對其中的System.map 、vmlinuz、initrd-2.4.7-10.img印象可能比較深刻,因為編譯內核過程中涉及到這些檔案的建立等操作。那麼這幾個文件是怎麼產生的?又有什麼作用呢?本文對此做些介紹。
vmlinuz是可引導的(可引導意味著它有能力把作業系統載入至記憶體而使電腦能夠使用並且軟體程序可以運作)、壓縮過的核心。“vm”代表“Virtual Memory”。Linux 支援虛擬記憶體,不像古老的作業系統譬如DOS有640KB記憶體的限制。Linux能夠使用硬碟空間作為虛擬記憶體,因此得名“vm”。vmlinuz是可執行的Linux核心,它位於/boot/vmlinuz,它一般是一個軟鏈接(soft-link)。
vmlinuz的建立有兩種方式。一是編譯核心時通過“make zImage”產生,然後通過: “cp /usr/src/linux-2.4/arch/i386/linux/boot/zImage /boot/vmlinuz”複製。zImage適用於小核心的情況,它的存在是為了向後的兼容性。二是核心編譯時通過命令"make bzImage"建立,然後通過:“cp /usr/src/linux-2.4/arch/i386/linux/boot/bzImage /boot/vmlinuz”複製。bzImage是壓縮的核心映像檔案,需要注意,bzImage不是用bzip2壓縮的,bzImage中的bz容易引起誤解,bz表示“big zImage”。 bzImage中的b是“big”意思。
zImage(vmlinuz)和bzImage(vmlinuz)都是使用gzip壓縮的。它們不僅是一個壓縮檔案,而且在這兩個檔案的開頭部分內嵌有gzip解壓縮原始碼。所以你不能用gunzip 或 gzip -dc來解壓縮vmlinuz來得到vmlinux。
核心檔案中包含一個微型(小型)的gzip解壓縮程式碼用於解壓縮核心並引導它(可引導意味著它有能力把作業系統載入至記憶體而使電腦能夠使用並且軟體程序可以運作)。兩者的不同之處(zImage)在於,老的zImage解壓縮內核到低端內存(第一個640K),bzImage解壓縮內核到高端內存(1M以上)。如果內核比較小,那麼可以采用zImage 或bzImage之一,兩種方式引導的系統運行時是相同的。大的內核采用bzImage,不能采用zImage。 ( vmlinux是未壓縮的核心,vmlinuz是vmlinux的壓縮核心。 )
vmlinux 是ELF格式檔案,也就是編譯出来的最原始的檔案。
vmlinuz應該是由vmlinux經過arm-linux-objcopy後,並且經過壓縮後的核心檔案
zImage是vmlinuz經過gzip壓縮後的檔案,適用於小核心
- Jan 14 Tue 2014 11:24
uImage & zImage 差異
uImage & zImage 差異
kernel 編譯完會產生 zImage。
uImage 是 zImage 在加上一個 64 Bytes 的 header。這是給 uboot 載入 kernel 用的。(利用 bootm )
uImage 如何產生? 利用 mkimage 來產生。
mkimage 參數說明:
[root@localhost tools]# ./mkimage
Usage: ./mkimage -l image
- Jan 10 Fri 2014 13:56
Linux : Signal(訊號) about SA_RESTART
SA_RESTART
Provide behavior compatible with BSD signal semantics by making certain system calls restartable across signals.
1, 訊號將中斷慢阻塞调用, 导致这些调用返回-1并且errno=EINTR表示被信号中断.
2, 部分函数是自启动的, 即永远不会返回-1与errno=EINTR, 它们在信号函数处理返回后继续执行完成, 而不是以彻底的失败告终.
这里很明确的说明, 这个flag只是为了兼容BSD, 明确的指定让能够自启动的慢阻塞调用能够从信号中断中恢复并继续, 它并没有令所有调用都恢复的本事, 要搞清楚.
楼主貌似疑惑的点很普通... 假设调用sleep(10):
1, 假设它不能自启动, 那么sleep(10)被信号中断, 等信号函数返回后sleep(10)立即失败返回-1, errno=EINTR. 也许此时才睡了5秒而已.
2, 假设它能够自启动, 并通过SA_RESTART设置信号处理函数明确的帮助慢阻塞调用重启动, 那么sleep(10)在5秒被中断, 信号函数结束后会继续睡另外5秒, 然后正常返回.
- Jan 09 Thu 2014 10:46
什麼是Cross Compiler ?
Cross Compiler
從工作以來就一直使用Cross Compiler
可是現在終於知道為何這樣稱呼
我試著用口語來解釋
當我們使用compiler來編譯某個程式
該程式一定只能執行在與你編譯的機器相同的平台
但是現在Cross Compiler編譯出來的不是相同平台
而是要執行在你的target平台上,例如ARM
所以Cross Compiler for ARM就是編譯出來的程式
得由ARM CPU才能執行
- Jan 08 Wed 2014 18:10
WHAT IS __USE_GNU ?
碰到过,是因为man
和头文件不一致(可能是版本导致也可能就是mistake
),
最后结果当然以实际的头文件为准。
vim /usr/include/string.h
:
#if defined __USE_GNU
extern char *strndup (__const char *__string, size_t __n)
__THROW __attribute_malloc__ __nonnull ((1));
#endif
所以显然这时候应该#define __USE_GNU
而不是#define _GNU_SOURCE
..
更新
关于_GNU_SOURCE
宏,它同时也是是在
它同时也是features.h
中用于特性控制的一个功能测试宏
/user/include/features.h
/* If _GNU_SOURCE was defined by the user, turn on all the other features. */
#ifdef _GNU_SOURCE
# undef _ISOC99_SOURCE
# define _ISOC99_SOURCE 1
# undef _POSIX_SOURCE
# define _POSIX_SOURCE 1
# undef _POSIX_C_SOURCE
# define _POSIX_C_SOURCE 200809L
# undef _XOPEN_SOURCE
# define _XOPEN_SOURCE 700
# undef _XOPEN_SOURCE_EXTENDED
# define _XOPEN_SOURCE_EXTENDED 1
# undef _LARGEFILE64_SOURCE
# define _LARGEFILE64_SOURCE 1
# undef _BSD_SOURCE
# define _BSD_SOURCE 1
# undef _SVID_SOURCE
# define _SVID_SOURCE 1
# undef _ATFILE_SOURCE
# define _ATFILE_SOURCE 1
#endif
其中_ISOC99_SOURCE
, _POSIX_SOURCE
, _XOPEN_SOURCE
都是功能测试宏,
用于指示是否包含对应标准的特性,
而这些不同的特性源于过去20多年来进行的各种标准化工作(ANSI, ISO, POSIX, FIPS等),
- Jan 02 Thu 2014 13:30
Embedded Linux(嵌入式Linux)
引言:
Embedded Linux技術基於開放原始碼的資源,並且已經是當今最重要的嵌入式應用技術之一。Embedded Linux是燒錄在目標裝置上(特定硬體)的系統,1個Embedded Linux系統包含Linux kernel(核心)與 root filesystem(檔案系統) 2大部分,Embedded Linux系統到底由哪些組成要素構成,本文將由概念的層面進行分析。
本文:
由於目前的目標裝置(特定硬體),都必須嵌入極為複雜的功能,所以「嵌入式作業系統(Embedded system)」成為嵌入式系統不可或缺的要素。由於嵌入式系統是功能導向的系統,因此必須設計、選擇或購買正確(或適合)的目標裝置,才能開始實作並嵌入「嵌入式系統」。因此,嵌入式系統技術是以功能、與目標裝置為分類的1種技術。
例如,與PDA相關的目標裝置(即硬體)、與MP3播放器相關的目標裝置、與3G手機相關的目標裝置...等等;使用這些目標裝置所開發的特定功能系統,便是PDA的嵌入式系統、MP3音樂播放的嵌入式系統、3G手機的嵌入式系統。
Embedded Linux其實並不是1個作業系統,而是代表「應用Linux系統於Embedded system」的名詞。Embedded Linux的技術核心主軸是在研究「如何將Linux系統嵌入至嵌入式目標裝置裡」。
- Dec 21 Sat 2013 16:01
電影:戰爭遊戲(Ender's Game)
劇情簡介:美國「世界科幻協會」雨果獎、「美國科幻暨奇幻作家協會」星雲獎雙料得主歐森史考特卡德暢銷科幻小說【戰爭遊戲】改編。蟲族曾兩度攻擊地球並幾乎摧毀人類,為了保障人類能在下一場戰爭中獲勝,聯合政府培育一群軍事天才,培訓他們的戰略技能,一開始的訓練,是以「遊戲」的方式展開……。安德是天才中的天才,他在每一場遊戲中都獲得勝利,但他是否有足夠的智慧去拯救這個星球?
- Dec 09 Mon 2013 15:43
電影:蜘蛛人驚奇再起2: 電光之戰(The Amazing Spider-Man 2)
- Dec 03 Tue 2013 13:15
電影:這個高中沒有鬼!
劇情簡介:泰國影史最賣座3D鬼片,稱霸雙周票房冠軍。你一定聽過校長拍胸脯說:我們學校沒有鬼! 抓鬼特攻隊決定到鬧鬼最兇的『都蘭高校』破解最恐怖的傳言。“墜樓高中生”、“陰魂不散教官”…等,直到他們組團冒險,才發現這些傳說,都是真的!!