PIXNET Logo登入

立你斯學習記錄

跳到主文

歡迎光臨 立你斯 在痞客邦的小天地..這裡主要轉貼我工作上有遇過的問題或看過的查過的資料....盡量轉成正體..留存

部落格全站分類:數位生活

  • 相簿
  • 部落格
  • 留言
  • 名片
  • 9月 27 週四 201809:40
  • U_boot 的 bootcmd 和bootargs參數詳解

U_boot 的 bootcmd 和bootargs參數詳解
https://www.cnblogs.com/cornflower/archive/2010/03/27/1698279.html
 
(繼續閱讀...)
文章標籤

立你斯 發表在 痞客邦 留言(0) 人氣(7,713)

  • 個人分類:u-boot
▲top
  • 6月 07 週二 201118:22
  • U-BOOT SD啟動

 
SD啟動 相關網址
 
http://ly50247.appspot.com/category/arm
ubuntu-9.04_v0.18
(繼續閱讀...)
文章標籤

立你斯 發表在 痞客邦 留言(0) 人氣(545)

  • 個人分類:u-boot
▲top
  • 5月 17 週二 201118:21
  • Kernel / uboot logo

 
Kernel / uboot logo
喜歡的圖片儲存成png格式
(繼續閱讀...)
文章標籤

立你斯 發表在 痞客邦 留言(0) 人氣(1,366)

  • 個人分類:u-boot
▲top
  • 5月 25 週二 201020:40
  • BootLoader與Linux内核的參數傳遞(轉)

BootLoader與Linux内核的參數傳遞(轉)
分類:u-boot 相關筆記(以2410為例)
2008/11/24 12:06
在嵌入式系統中,BootLoader 是用來初始化硬件,加載內核,傳遞參數。因為嵌入式系統的硬件環境各不相同,所以嵌入式系統的BootLoader 也各不相同,其中比較通用的是U-Boot,它支持不同的體系結構,如ARM,PowerPC,X86,MIPS 等。本文著重介BootLoader與內核之間參數傳遞這一基本功能。本文的硬件平台是基於AT91RM9200 處理器系統,軟件平台是Linux-2.6.19.2 內核。內核映像文件為zImage。
1. 系統硬件平台簡介
AT91RM9200 處理器,它是由Atmel 公司基於ARM920T 內核的微處理器,帶有內存管理單元,CPU 時鐘最高可達240MHz,它具有豐富的標準接口,EBI 接口,內部集成了靜態存儲控制器(SMC),SDRAM 控制器,Burst Flash 控制器。有關處理器的說明請參考AT91RM9200 的數據手冊。本系統SDRAM(64MB)地址為:0x20000000, NorFlash(8MB)的地址為:0x10000000[1]。
2. BootLoader 設計和實現
內核源代碼目錄樹下的documentation/arm/booting[2]文檔規定了基於ARM 體系結構BootLoader 的基本功能。本系統BootLoader 除了完成這些基本的功能外,還結合自身硬件的特點加入了代碼搬運等功能。
BootLoader 的流程是:系統上電復位后,首先從NorFlash 開始運行(由處理器BMS 引腳連接決定),因為處理器此時的0 地址就是NorFlash 的首地址(0x10000000),BootLoader就是被燒寫在這個位置,AT91RM9200 處理器能夠映射的地址範圍只有0x0000
0000—0x001f ffff。 BootLoader 執行的第一步就是將自身代碼從NorFlash 中搬運到處理器內部的RAM 中(0x00200000),然后將0 地址映射到內部RAM,並且跳轉到內部RAM 的相應地址處繼續執行。進入內部RAM 后才進入真正的硬件初始化階段,這個階段初始化的各種控制器都是內核所必須的,包括:PMC, EBI, SMC, SDRAM, USART 等。接著就是創建內核參數鏈表(Tagged list),創建完鏈表就是搬運事先燒寫在NorFlash 中的內核映像和根文件系統映像到SDRAM,根據內核對BootLoader 的基本要求關閉中斷,MMU 和數據Cache,並且配置r0=0, r1=0x0000 00fb 或者0x00000106(根據內核中linux/arch/arm/tools/mach-types[2]
規定的機器編號),r2=0x20000100(BootLoader 傳遞給內核參數鏈表的物理地址),在ARM體系結構中,這個地址在同一種處理器的機器描述符(machine_desc)中都是默認的,所以在這里可以不指定。最后BootLoader 直接跳轉到SDRAM 的內核處執行。
3. 內核參數鏈表
BootLoader 可以通過兩種方法傳遞參數給內核, 一種是舊的參數結構方式(parameter_struct),主要是2.6 之前的內核使用的方式。另外一種就是現在的2.6 內核在用的參數鏈表 (tagged list) 方式。這些參數主要包括,系統的根設備標志,頁面大小,內存的起始地址和大小,RAMDISK 的起始地址和大小,壓縮的RAMDISK 根文件系統的起始地址和大小,內核命令參數等[3][4][5]。
內核參數鏈表的格式和說明可以從內核源代碼目錄樹中的 include/asm-arm/setup.h[2]中找到,參數鏈表必須以ATAG_CORE 開始,以ATAG_NONE 結束。這里的ATAG_CORE,ATAG_NONE 是各個參數的標記,本身是一個32 位值,例如:ATAG_CORE=0x54410001。
其它的參數標記還包括: ATAG_MEM32 , ATAG_INITRD , ATAG_RAMDISK ,ATAG_COMDLINE 等。每個參數標記就代表一個參數結構體,由各個參數結構體構成了參數鏈表。參數結構體的定義如下:
struct tag
{
struct tag_header hdr;
union {
struct tag_core core;
struct tag_mem32 mem;
struct tag_videotext videotext;
struct tag_ramdisk ramdisk;
struct tag_initrd initrd;
struct tag_serialnr serialnr;
struct tag_revision revision;
struct tag_videolfb videolfb;
struct tag_cmdline cmdline;
struct tag_acorn acorn;
struct tag_memclk memclk;
} u;
};
參數結構體包括兩個部分,一個是 tag_header 結構體,一個是u 聯合體。
tag_header 結構體的定義如下:
struct tag_header
{
u32 size;
u32 tag;
};
其中 size:表示整個tag 結構體的大小(用字的個數來表示,而不是字節的個數),等於tag_header 的大小加上u 聯合體的大小,例如,參數結構體ATAG_CORE 的
size=(sizeof(tag->tag_header)+sizeof(tag->u.core))>>2,一般通過函數tag_size(struct * tag_xxx)來獲得每個參數結構體的size。其中tag:表示整個tag 結構體的標記,如:ATAG_CORE等。
聯合體u 包括了所有可選擇的內核參數類型,包括:tag_core, tag_mem32,tag_ramdisk等。參數結構體之間的遍曆是通過函數tag_next(struct * tag)來實現的。本系統參數鏈表包括的結構體有: ATAG_CORE , ATAG_MEM, ATAG_RAMDISK, ATAG_INITRD32 ,ATAG_CMDLINE,ATAG_END。在整個參數鏈表中除了參數結構體ATAG_CORE 和ATAG_END 的位置固定以外,其他參數結構體的順序是任意的。本BootLoader 所傳遞的參數鏈表如下:第一個內核參數結構體,標記為ATAG_CORE,參數類型為tag_core。每個參數類型的定義請參考源代碼文件。
tag_array 初始化為指向參數鏈表的第一個結構體的指針。
tag_array->hdr.tag=ATAG_CORE;
tag_array->hdr.size=tag_size(tag_core);
tag_array->u.core.flags=1;
tag_array->u.core.pagesize=4096;
tag_array->u.core.rootdev=0x00100000;
tag_array=tag_next(tag_array);
tag_array->hdr.tag=ATAG_MEM;
tag_array->hdr.size=tag_size(tag_mem32);
tag_array->u.mem.size=0x04000000;
tag_array->u.mem.start=0x20000000;
tag_array=tag_next(tag_array);
……
tag_array->hdr.tag=ATAG_NONE;
tag_array->hdr.size=0;
tag_array=tag_next(tag_array);
最后將內核參數鏈表復制到內核默認的物理地址0x20000100 處。這樣參數鏈表就建好了。
4. 內核接收參數
下面從基於ARM體系結構的zImage 映像啟動來分析Linux 內核是怎樣接收BootLoader傳遞過來的內核參數,zImage 啟動過程如下圖所示。
(圖有時間再畫)
在文件 arch/arm/boot/compressed/head.S[2]中 start 為zImage 的起始點,部分代碼如下:
start:
mov r7, r1
mov r8, r2
…...
mov r0, r4
mov r3, r7
bl decompress_kernel
b call_kernel
call_kernel:
……
mov r0, #0
mov r1, r7
mov r2, r8
mov pc, r4
首先將BootLoader 傳遞過來的r1(機器編號)、r2(參數鏈表的物理地址)的值保存到r7、r8 中,再將r7 作為參數傳遞給解壓函數decompress_kernel()。在解壓函數中,再將r7 傳遞給全局變量__machine_arch_type。在跳到內核(vmlinux)入口之前再將r7,r8 還原到r1,r2 中。
在文件 arch/arm/kernel/head.S[2]中,內核(vmlinux)入口的部分代碼如下:
stext:
mrc p15, 0, r9, c0, c0
bl __lookup_processor_type
………
bl __lookup_machine_type
首先從處理器內部特殊寄存器(CP15)中獲得ARM 內核的類型,從處理器內核描述符(proc_info_list)表(__proc_info_begin—__proc_info_end)中查詢有無此ARM 內核的類型,如果無就出錯退出。處理器內核描述符定義在 include/asm-arm/procinfo.h[2]中,具體的函數實現在 arch/arm/mm/proc-xxx.S[2]中,在編譯連接過程中將各種處理器內核描述符組合成表。接著從機器描述符(machine_desc)表(__mach_info_begin—__mach_info_end)中查詢有無r1 寄存器指定的機器編號,如果沒有就出錯退出。機器編號mach_type_xxx 在arch/arm/tools/mach-types[2]文件中說明,每個機器描述符中包括一個唯一的機器編號,機器描述符的定義在 include/asm-arm/mach/arch.h[2]中,具體實現在 arch/arm/mach-xxxx[2]文件夾中,在編譯連接過程中將基於同一種處理器的不同機器描述符組合成表。例如,基於AT91RM9200 處理器的各種機器描述符可以參考 arch/arm/mach-at91rm9200/board-xxx.c[2],機器編號為262 的機器描述符如下所示:
MACHINE_START(AT91RM9200DK, "Atmel AT91RM9200-DK")
/* Maintainer: SAN People/Atmel */
.phys_io = AT91_BASE_SYS,
.io_pg_offst = (AT91_VA_BASE_SYS >> 18) & 0xfffc,
.boot_params = AT91_SDRAM_BASE + 0x100,
.timer = &at91rm9200_timer,
.map_io = dk_map_io,
.init_irq = dk_init_irq,
.init_machine = dk_board_init,
MACHINE_END
最后就是打開MMU,並跳轉到 init/main.c[2]的start_kernel(初始化系統。在 init/main.c[2] 中,函數start_kernel()的部分代碼如下:
{
……
setup_arch();
……
}
在 arch/arm/kernel/setup.c[2]中,函數setup_arch()的部分代碼如下:
{
……
setup_processor();
mdesc=setup_machine(machine_arch_type);
……
parse_tags(tags);
……
}
setup_processor()函數從處理器內核描述符表中找到匹配的描述符,並初始化一些處理器變量。setup_machine()用機器編號(在解壓函數decompress_kernel 中被賦值)作為參數返回機器描述符。從機器描述符中獲得內核參數的物理地址,賦值給tags 變量。然后調用parse_tags()函數分析內核參數鏈表,把各個參數值傳遞給全局變量。這樣內核就收到了BootLoader 傳遞的參數。
5. 參數傳遞的驗證和測試
參數傳遞的結果可以通過內核啟動的打印信息來驗證。
Machine: Atmel AT91RM9200-DK
……
Kernel command line: console=ttyS0,115200 root=/dev/ram rw init=/linuxrc
……
Memory: 64MB = 64MB total
……
checking if image is initramfs...it isn't (no cpio magic); looks like an initrd
Freeing initrd memory: 1024K
……
RAMDISK: Compressed image found at block 0
一個完備的BootLoader 是一個很復雜的工程,本文所介紹的只是嵌入式系統的BootLoaer 基本功能。任何一個BootLoader 都離不開這個基本功能,內核只有接收這些參數才能正確地啟動,同時也為內核的移植和調試奠定了良好的基礎。--
(繼續閱讀...)
文章標籤

立你斯 發表在 痞客邦 留言(0) 人氣(405)

  • 個人分類:u-boot
▲top
  • 5月 25 週二 201020:38
  • u-boot nand flash read/write cmd

u-boot nand flash read/write cmd
支援的命令函數說明
1. nand info/nand device
功能:顯示當前nand flash晶片資訊。
函數調用關係如下(按先後順序):
static void nand_print(struct nand_chip *nand) ;
2. nand erase
功能:擦除指定塊上的數據。
函數調用關係如下(按先後順序):
int nand_erase(struct nand_chip* nand, size_t ofs, size_t len, int clean);
3. nand bad
功能:顯示壞塊。
函數調用關係如下(按先後順序):
static void nand_print_bad(struct nand_chip* nand);
int check_block (struct nand_chip *nand, unsigned long pos);
4. nand read
功能:讀取nand flash信息到SDRAM。
函數調用關係如下(按先後順序):
int nand_rw (struct nand_chip* nand, int cmd,size_t start, size_t len, size_t * retlen, u_char * buf);
static int nand_read_ecc(struct nand_chip *nand, size_t start, size_t len,
size_t * retlen, u_char *buf, u_char *ecc_code);
static void NanD_ReadBuf (struct nand_chip *nand, u_char * data_buf, int cntr);
READ_NAND(adr);
5. nand write
功能:從SDRAM寫數據到nand flash中。
函數調用關係如下(按先後順序):
int nand_rw (struct nand_chip* nand, int cmd,size_t start, size_t len, size_t * retlen, u_char * buf);
static int nand_write_ecc (struct nand_chip* nand, size_t to, size_t len,
size_t * retlen, const u_char * buf, u_char * ecc_code);
static int nand_write_page (struct nand_chip *nand, int page, int col, int last, u_char * ecc_code);
WRITE_NAND(d , adr);
 
4.2.32 nand info
列印nand flash資訊
CRANE2410 # nand info
Device 0: Samsung K9F1208U0B at 0x4e000000 (64 MB, 16 kB sector)
4.2.33 nand device <n>
顯示某個nand設備
CRANE2410 # nand device 0
Device 0: Samsung K9F1208U0B at 0x4e000000 (64 MB, 16 kB sector)
... is now current device
4.2.34 nand bad
CRANE2410 # nand bad
Device 0 bad blocks:
4.2.35 nand read
nand read InAddr FlAddr size
InAddr: 從nand flash中讀到記憶體的起始位址。
FlAddr: nand flash 的起始位址。
size: 從nand flash中讀取的數據的大小。
CRANE2410 # nand read 0x30008000 0 0x100000
NAND read: device 0 offset 0, size 1048576 ...
1048576 bytes read: OK
4.2.36 nand erease
nand erase FlAddr size
FlAddr: nand flash 的起始位址
size: 從nand flash中擦除資料塊的大小
CRANE2410 # nand erase 0x100000 0x20000
NAND erase: device 0 offset 1048576, size 131072 ... OK
4.2.37 nand write
nand write InAddr FlAddr size
InAddr: 寫到Nand Flash中的資料在記憶體的起始位址
FlAddr: Nand Flash的起始位址
size: 數據的大小
CRANE2410 # nand write 0x30f00000 0x100000 0x20000
NAND write: device 0 offset 1048576, size 131072 ...
131072 bytes written: OK
 
4.2.37 nboot
u-boot-1.1.4代碼對於nboot命令的幫助不正確,修改如下:
正確的順序為:
nboot InAddr dev FlAddr
InAddr: 需要裝載到的記憶體的位址。
FlAddr: 在nand flash上uImage存放的地址
dev: 設備號
需要提前設置環境變數,否則nboot不會調用bootm
CRANE2410 #setenv autostart yes
CRANE2410 # nboot 30008000 0 100000
Loading from device 0: <NULL> at 0x4e000000 (offset 0x100000)
Image Name: Linux-2.6.14.3
Created: 2006-07-06 7:31:52 UTC
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 897428 Bytes = 876.4 kB
Load Address: 30008000
Entry Point: 30008040
Automatic boot of image at addr 0x30008000 ...
## Booting image at 30008000 ...
Starting kernel ...
4.3 命令簡寫說明
所以命令都可以簡寫,只要命令前面的一部分不會跟其他命令相同,就可以不用寫全整個命令.
save命令
CRANE2410 # sa
Saving Environment to Flash...
Un-Protected 1 sectors
Erasing Flash...Erasing sector 10 ... Erased 1 sectors
4.4 把文件寫入NandFlash
如果把一個傳到記憶體中的檔寫入到Nand Flash中, 如:新的uboot.bin, zImage(內核),
rootfs等, 如果做呢?我們可以用Nand Flash命令來完成. 但是Nand Flash寫時,必須先要把Nand
Flash的寫入區全部擦除後,才能寫. 下面以把記憶體0x30008000起長度為0x20000的內容寫到Nand
Flash中的0x100000為例.
CRANE2410 # nand erase 0x100000 20000
NAND erase: device 0 offset 1048576, size 131072 ... OK
CRANE2410 # nand write 0x30008000 0x100000 0x20000
NAND write: device 0 offset 1048576, size 131072 ...
131072 bytes written: OK
(繼續閱讀...)
文章標籤

立你斯 發表在 痞客邦 留言(0) 人氣(1,339)

  • 個人分類:u-boot
▲top
  • 4月 12 週一 201018:53
  • u-boot啟動給內核傳參數和內核讀取參數,結構標記

 
U-boot 會給 Linux Kernel 傳遞很多參數,如:序列埠, RAM , videofb 等。而 Linux kernel 也會讀取和處理這些參數。兩者之間通過 struct tag 來傳遞參數。 U-boot 把要傳遞給 kernel 的東西儲存在 struct tag 資料架構中,啟動 kernel 時,把這個架構體的實體位址傳給 kernel ; Linux kernel 通過這個位址,用 parse_tags 解析出傳遞過來的參數。
(繼續閱讀...)
文章標籤

立你斯 發表在 痞客邦 留言(0) 人氣(2,999)

  • 個人分類:u-boot
▲top
  • 11月 01 週日 200916:02
  • u-boot源码分析 --- 启动第二阶段

u-boot源码分析 --- 启动第二阶段 ,基于2410 启动代码 分析 收藏
我们先来看初始化函数表: init_sequence
lib_arm/board.c:
typedef int (init_fnc_t) (void);
init_fnc_t *init_sequence[] = {
(繼續閱讀...)
文章標籤

立你斯 發表在 痞客邦 留言(0) 人氣(299)

  • 個人分類:u-boot
▲top
  • 11月 01 週日 200915:42
  • UBOOT GCC的語法

1.  .ltorg
2. DECLARE_GLOBAL_DATA_PTR
 
1.  .ltorg
LTORGLTORG 指令指示彙編器立即彙編當前文字池。
(in gcc is .ltorg  the literal pools origin)
 
 
語法LTORG
用法彙編器在每個代碼節末尾彙編當前文字池。代碼節的結束位置由後續節開始處的 AREA 指令確定,或由彙編代碼的結束位置確定。
這些缺省文字池有時會超出某些 LDR、VLDR 和 WLDR 偽指令的範圍。使用 LTORG 可確保在指定範圍內彙編文字池。有關偽指令的詳細信息,請參閱:
LDR偽指令
VLDR偽指令
無線MMX加載和存儲指令
大型程序可能需要多個文字池。將 LTORG 指令放在無條件跳轉或子例程返回指令之後,以使處理器不會試圖將常數作為指令來執行。
彙編器對文字池中的數據進行字對齊。
示例        AREA Example, CODE, READONLY
 start BL func1
 func1 ; function body
         ; code
         LDR r1,=0x55555555 ; => LDR R1, [pc, #offset to Literal Pool 1]
         ; code
         MOV pc,lr ; end function
         LTORG ; Literal Pool 1 contains literal &55555555.
 data SPACE 4200 ; Clears 4200 bytes of memory,
                                 ; starting at current location.
         END ; Default literal pool is empty.
(繼續閱讀...)
文章標籤

立你斯 發表在 痞客邦 留言(0) 人氣(393)

  • 個人分類:u-boot
▲top
  • 11月 01 週日 200915:20
  • U-BOOT 第一階段

都知道U-BOOT分為兩個階段。
第一階段是(~/cpu/arm920t/start.S中)在FLASH上運行(一般情況下),完成對硬件的初始化,包括看門狗,中斷緩存等,並且負責把代碼搬移到SDRAM中(在搬移的時候檢查自身代碼是否在SDRAM中),然後完成C程序運行所需要環境的建立,包括堆棧的初始化等,最後執行一句跳轉指令:
  ldr pc, _start_armboot
_start_armboot: .word start_armboot,
進入到/lib_arm/board.c中的函數void start_armboot (void)。從此就進入了第二階段。這是在很多資料上都有講述的,所以勿需多言了。
(繼續閱讀...)
文章標籤

立你斯 發表在 痞客邦 留言(0) 人氣(635)

  • 個人分類:u-boot
▲top
  • 7月 27 週一 200917:49
  • u-boot-Makefile解析

 
u-boot-Makefile解析
要了解一個LINUX工程的架構必須看懂Makefile,尤其是頂層的,沒辦法,UNIX世界就是這么無奈,什么東西都用文件去管理、配置。首先在這方面我是個新手,時間所限只粗淺地看了一些Makefile規則。
(繼續閱讀...)
文章標籤

立你斯 發表在 痞客邦 留言(0) 人氣(3,986)

  • 個人分類:u-boot
▲top
12»

熱門文章

  • (62,123)NAND Flash和NOR Flash的比較
  • (62,021)GPS資料格式
  • (21,597)Linux中Workqueue機制分析
  • (17,734)嵌入式經典面試題 
  • (14,918)按鍵精靈-取得系統時間
  • (8,537)MISRA--作為工業標準的C編程規範(1)
  • (6,374)[WII]Homebrew Channel的由來、作用、檔案義意
  • (5,275)[轉載]Linux HAL (Hardware Abstraction Layer)的工作原理
  • (3,373)Platform_device 和 Platform_driver
  • (2,697)GCC 4.6 warning: variable set but not used

文章分類

toggle 程式語言 (17)
  • openCL (2)
  • C++ (1)
  • 8051 (5)
  • GPS (4)
  • BarCode (3)
  • 多媒體 (7)
  • 網路相關 (23)
  • 程式設計 (20)
  • ARM (22)
  • u-boot (19)
  • 各種規格 (41)
  • 程式心得 (34)
  • 程式工具 (18)
  • 版本控制 (13)
  • RTOS (5)
  • uC/OS 筆記 (12)
  • Objective-C (3)
toggle 其他 (8)
  • SCRATCH (1)
  • 三國風雲 (4)
  • 產業消息 (2)
  • 未分類資料夾 (12)
  • 娛樂 (13)
  • 語文學習 (8)
  • 理財 (7)
  • 幼教 (2)
toggle Linux Driver (9)
  • PCI (6)
  • driver 教學 (17)
  • driver 問題修正 (11)
  • 嵌入式 driver 相關 (10)
  • USB (8)
  • I2C (7)
  • V4L2 (8)
  • Driver 其他 (29)
  • Alsa (15)
toggle Linux (19)
  • yocto (4)
  • WIFI (14)
  • GUI (10)
  • CentOS (4)
  • Linux system programming (8)
  • 工作使用 (2)
  • 模擬-VM (3)
  • 編譯相關 (26)
  • tslib (9)
  • 檔案系統 (18)
  • 嵌入式相關 (10)
  • 系統相關 (21)
  • LINUX (57)
  • 模擬-colinux (6)
  • 模擬-cygwin (10)
  • Android (21)
  • Mplayer (11)
  • tool chain (6)
  • 系統指令 (6)
  • NV (1)
  • 未分類文章 (1)

最新文章

  • C語言學習
  • Could not resolve host: source.codeaurora.org
  • NVIDIA_Jetson_ISP (ORIN)
  • AP6275S 相關
  • rtl8822cs 相關
  • LINUX 解決package ~ is not configured yet
  • Ubuntu 22.04 安裝 VMWare 16.2.3 後無法啟動
  • How To Access Your Google Drive on Ubuntu
  • xinput
  • gsettings 取得 KEY 值

文章精選

文章搜尋

最新留言

  • [25/05/01] 訪客 於文章「NVIDIA_Jetson_ISP (O...」留言:
    您好!有什麼我可以幫忙的嗎? 我是工程師 也可以看看我的...
  • [22/02/11] lynn770707 於文章「Linux GPIO Driver Gu...」留言:
    這篇記錄幫了我大忙~感謝小藍XDDDD...
  • [16/09/05] Scron Pen 於文章「使用變數型別的良好習慣...」留言:
    感謝,豁然開朗,受益良多~...
  • [12/02/05] 恰吉 於文章「Android X86版體驗...」留言:
    請問一下~安裝的時候找不到硬碟就沒辦法了嗎~ 發現IDE硬碟...
  • [11/12/01] cwhuang 於文章「Android X86版體驗...」留言:
    前面的說明有些錯誤。Google Android 平台從未正...
  • [11/07/14] *香甜水蜜桃* 於文章「alsa(Advanced Linux ...」留言:
    <p>我可以挖角你嘛?</p> <p>對不起~看到你的文章我...
  • [11/05/31] Mr.Kenny™ 於文章「Android X86版體驗...」留言:
    如果下載最近的Android source來編譯,可能會發現...
  • [11/05/11] love521025 於文章「Android 軟件安裝程序(*.apk...」留言:
    請問~<div> 我在網路上有看到有人開發出來的一個Andr...
  • [11/03/17] 立你斯 於文章「CCIR656 - BT.656...」留言:
    <p><font style="BORDER-BOTTOM:...
  • [10/11/25] 立你斯 於文章「Linux kernel 版本不包含GI...」留言:
    <p><span style="FONT-FAMILY:宋体...

參觀人氣

  • 本日人氣:
  • 累積人氣:

個人資訊

立你斯
暱稱:
立你斯
分類:
數位生活
好友:
累積中
地區:

誰來我家