日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

从Uboot到Linux技术

發布時間:2024/9/3 linux 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 从Uboot到Linux技术 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 引言

在專用的嵌入式板子運行 GNU/Linux 系統已經變得越來越流行。一個嵌入式 Linux 系統從軟件的角度看通??梢苑譃樗膫€層次:

1.?引導加載程序。包括固化在固件(firmware)中的 boot 代碼(可選),和 Boot Loader 兩大部分。

2.?Linux 內核。特定于嵌入式板子的定制內核以及內核的啟動參數。

3.?文件系統。包括根文件系統和建立于 Flash 內存設備之上文件系統。通常用 ram disk 來作為 root fs。

4.?用戶應用程序。特定于用戶的應用程序。有時在用戶應用程序和內核層之間可能還會包括一個嵌入式圖形用戶界面。常用的嵌入式 GUI 有:MicroWindows 和 MiniGUI 懂。

引導加載程序是系統加電后運行的第一段軟件代碼?;貞浺幌?PC 的體系結構我們可以知道,PC 機中的引導加載程序由 BIOS--(Basic Input Output System)(其本質就是一段固件程序)和位于硬盤 MBR 中的 OS Boot Loader(比如,LILO 和 GRUB 等)一起組成。BIOS 在完成硬件檢測和資源分配后,將硬盤 MBR 中的 Boot Loader 讀到系統的 RAM 中,然后將控制權交給 OS Boot Loader。Boot Loader 的主要運行任務就是將內核映象從硬盤上讀到 RAM 中,然后跳轉到內核的入口點去運行,也即開始啟動操作系統。

而在嵌入式系統中,通常并沒有像 BIOS 那樣的固件程序(注,有的嵌入式 CPU 也會內嵌一段短小的啟動程序),因此整個系統的加載啟動任務就完全由 Boot Loader 來完成。比如在一個基于 ARM7TDMI core 的嵌入式系統中,系統在上電或復位時通常都從地址 0x00000000 處開始執行,而在這個地址處安排的通常就是系統的 Boot Loader 程序。

本文將從 Boot Loader 的概念、Boot Loader 的主要任務、Boot Loader 的框架結構以及 Boot Loader 的安裝等四個方面來討論嵌入式系統的 Boot Loader。


2. Boot Loader 的概念

簡單地說,Boot Loader 就是在操作系統內核運行之前運行的一段小程序。通過這段小程序,我們可以初始化硬件設備、建立內存空間的映射圖,從而將系統的軟硬件環境帶到一個合適的狀態,以便為最終調用操作系統內核準備好正確的環境。

通常,Boot Loader 是嚴重地依賴于硬件而實現的,特別是在嵌入式世界。因此,在嵌入式世界里建立一個通用的 Boot Loader 幾乎是不可能的。盡管如此,我們仍然可以對 Boot Loader 歸納出一些通用的概念來,以指導用戶特定的 Boot Loader 設計與實現。

1. Boot Loader 所支持的 CPU 和嵌入式板

每種不同的 CPU 體系結構都有不同的 Boot Loader。有些 Boot Loader 也支持多種體系結構的 CPU,比如 U-Boot 就同時支持 ARM 體系結構和MIPS 體系結構。除了依賴于 CPU 的體系結構外,Boot Loader 實際上也依賴于具體的嵌入式板級設備的配置。這也就是說,對于兩塊不同的嵌入式板而言,即使它們是基于同一種 CPU 而構建的,要想讓運行在一塊板子上的 Boot Loader 程序也能運行在另一塊板子上,通常也都需要修改 Boot Loader 的源程序。

2. Boot Loader 的安裝媒介(Installation Medium)

系統加電或復位后,所有的 CPU 通常都從某個由 CPU 制造商預先安排的地址上取指令。比如,基于 ARM7TDMI core 的 CPU 在復位時通常都從地址 0x00000000 取它的第一條指令。而基于 CPU 構建的嵌入式系統通常都有某種類型的固態存儲設備(比如:ROM、EEPROM 或 FLASH 等)被映射到這個預先安排的地址上。因此在系統加電后,CPU 將首先執行 Boot Loader 程序。

下圖1就是一個同時裝有 Boot Loader、內核的啟動參數、內核映像和根文件系統映像的固態存儲設備的典型空間分配結構圖。


圖1 固態存儲設備的典型空間分配結構
?
?

3. 用來控制 Boot Loader 的設備或機制

主機和目標機之間一般通過串口建立連接,Boot Loader 軟件在執行時通常會通過串口來進行 I/O,比如:輸出打印信息到串口,從串口讀取用戶控制字符等。

4. Boot Loader 的啟動過程是單階段(Single Stage)還是多階段(Multi-Stage)

通常多階段的 Boot Loader 能提供更為復雜的功能,以及更好的可移植性。從固態存儲設備上啟動的 Boot Loader 大多都是 2 階段的啟動過程,也即啟動過程可以分為 stage 1 和 stage 2 兩部分。而至于在 stage 1 和 stage 2 具體完成哪些任務將在下面討論。

5. Boot Loader 的操作模式 (Operation Mode)

大多數 Boot Loader 都包含兩種不同的操作模式:"啟動加載"模式和"下載"模式,這種區別僅對于開發人員才有意義。但從最終用戶的角度看,Boot Loader 的作用就是用來加載操作系統,而并不存在所謂的啟動加載模式與下載工作模式的區別。

啟動加載(Boot loading)模式:這種模式也稱為"自主"(Autonomous)模式。也即 Boot Loader 從目標機上的某個固態存儲設備上將操作系統加載到 RAM 中運行,整個過程并沒有用戶的介入。這種模式是 Boot Loader 的正常工作模式,因此在嵌入式產品發布的時侯,Boot Loader 顯然必須工作在這種模式下。

下載(Downloading)模式:在這種模式下,目標機上的 Boot Loader 將通過串口連接或網絡連接等通信手段從主機(Host)下載文件,比如:下載內核映像和根文件系統映像等。從主機下載的文件通常首先被 Boot Loader 保存到目標機的 RAM 中,然后再被 Boot Loader 寫到目標機上的FLASH 類固態存儲設備中。Boot Loader 的這種模式通常在第一次安裝內核與根文件系統時被使用;此外,以后的系統更新也會使用 Boot Loader 的這種工作模式。工作于這種模式下的 Boot Loader 通常都會向它的終端用戶提供一個簡單的命令行接口。

像 Blob 或 U-Boot 等這樣功能強大的 Boot Loader 通常同時支持這兩種工作模式,而且允許用戶在這兩種工作模式之間進行切換。比如,Blob 在啟動時處于正常的啟動加載模式,但是它會延時 10 秒等待終端用戶按下任意鍵而將 blob 切換到下載模式。如果在 10 秒內沒有用戶按鍵,則 blob 繼續啟動 Linux 內核。

6. BootLoader 與主機之間進行文件傳輸所用的通信設備及協議

最常見的情況就是,目標機上的 Boot Loader 通過串口與主機之間進行文件傳輸,傳輸協議通常是 xmodem/ymodem/zmodem 協議中的一種。但是,串口傳輸的速度是有限的,因此通過以太網連接并借助 TFTP 協議來下載文件是個更好的選擇。

此外,在論及這個話題時,主機方所用的軟件也要考慮。比如,在通過以太網連接和 TFTP 協議來下載文件時,主機方必須有一個軟件用來的提供 TFTP 服務。

在討論了 BootLoader 的上述概念后,下面我們來具體看看 BootLoader 的應該完成哪些任務。



3. Boot Loader 的主要任務與典型結構框架

在繼續本節的討論之前,首先我們做一個假定,那就是:假定內核映像與根文件系統映像都被加載到 RAM 中運行。之所以提出這樣一個假設前提是因為,在嵌入式系統中內核映像與根文件系統映像也可以直接在 ROM 或 Flash 這樣的固態存儲設備中直接運行。但這種做法無疑是以運行速度的犧牲為代價的。

從操作系統的角度看,Boot Loader 的總目標就是正確地調用內核來執行。

另外,由于 Boot Loader 的實現依賴于 CPU 的體系結構,因此大多數 Boot Loader 都分為 stage1 和 stage2 兩大部分。依賴于 CPU 體系結構的代碼,比如設備初始化代碼等,通常都放在 stage1 中,而且通常都用匯編語言來實現,以達到短小精悍的目的。而 stage2 則通常用C語言來實現,這樣可以實現給復雜的功能,而且代碼會具有更好的可讀性和可移植性。

Boot Loader 的 stage1 通常包括以下步驟(以執行的先后順序):

  • 硬件設備初始化。

  • 為加載 Boot Loader 的 stage2 準備 RAM 空間。

  • 拷貝 Boot Loader 的 stage2 到 RAM 空間中。

  • 設置好堆棧。

  • 跳轉到 stage2 的 C 入口點。

Boot Loader 的 stage2 通常包括以下步驟(以執行的先后順序):

  • 初始化本階段要使用到的硬件設備。

  • 檢測系統內存映射(memory map)。

  • 將 kernel 映像和根文件系統映像從 flash 上讀到 RAM 空間中。

  • 為內核設置啟動參數。

  • 調用內核。

3.1 Boot Loader 的 stage1

3.1.1 基本的硬件初始化

這是 Boot Loader 一開始就執行的操作,其目的是為 stage2 的執行以及隨后的 kernel 的執行準備好一些基本的硬件環境。它通常包括以下步驟(以執行的先后順序):

1.?屏蔽所有的中斷。為中斷提供服務通常是 OS 設備驅動程序的責任,因此在 Boot Loader 的執行全過程中可以不必響應任何中斷。中斷屏蔽可以通過寫 CPU 的中斷屏蔽寄存器或狀態寄存器(比如 ARM 的 CPSR 寄存器)來完成。

2.?設置 CPU 的速度和時鐘頻率。

3.?RAM 初始化。包括正確地設置系統的內存控制器的功能寄存器以及各內存庫控制寄存器等。

4.?初始化 LED。典型地,通過 GPIO 來驅動 LED,其目的是表明系統的狀態是 OK 還是 Error。如果板子上沒有 LED,那么也可以通過初始化 UART 向串口打印 Boot Loader 的 Logo 字符信息來完成這一點。

5.?關閉 CPU 內部指令/數據 cache。

3.1.2 為加載 stage2 準備 RAM 空間

為了獲得更快的執行速度,通常把 stage2 加載到 RAM 空間中來執行,因此必須為加載 Boot Loader 的 stage2 準備好一段可用的 RAM 空間范圍。

由于 stage2 通常是 C 語言執行代碼,因此在考慮空間大小時,除了 stage2 可執行映象的大小外,還必須把堆棧空間也考慮進來。此外,空間大小最好是 memory page 大小(通常是 4KB)的倍數。一般而言,1M 的 RAM 空間已經足夠了。具體的地址范圍可以任意安排,比如 blob 就將它的 stage2 可執行映像安排到從系統 RAM 起始地址 0xc0200000 開始的 1M 空間內執行。但是,將 stage2 安排到整個 RAM 空間的最頂 1MB(也即(RamEnd-1MB) - RamEnd)是一種值得推薦的方法。

為了后面的敘述方便,這里把所安排的 RAM 空間范圍的大小記為:stage2_size(字節),把起始地址和終止地址分別記為:stage2_start 和 stage2_end(這兩個地址均以 4 字節邊界對齊)。因此:

stage2_end=stage2_start+stage2_size

另外,還必須確保所安排的地址范圍的的確確是可讀寫的 RAM 空間,因此,必須對你所安排的地址范圍進行測試。具體的測試方法可以采用類似于 blob 的方法,也即:以 memory page 為被測試單位,測試每個 memory page 開始的兩個字是否是可讀寫的。為了后面敘述的方便,我們記這個檢測算法為:test_mempage,其具體步驟如下:

1. 先保存 memory page 一開始兩個字的內容。

2. 向這兩個字中寫入任意的數字。比如:向第一個字寫入 0x55,第 2 個字寫入 0xaa。

3. 然后,立即將這兩個字的內容讀回。顯然,我們讀到的內容應該分別是 0x55 和 0xaa。如果不是,則說明這個 memory page 所占據的地址范圍不是一段有效的 RAM 空間。

4. 再向這兩個字中寫入任意的數字。比如:向第一個字寫入 0xaa,第 2 個字中寫入 0x55。

5. 然后,立即將這兩個字的內容立即讀回。顯然,我們讀到的內容應該分別是 0xaa 和 0x55。如果不是,則說明這個 memory page 所占據的地址范圍不是一段有效的 RAM 空間。

6. 恢復這兩個字的原始內容。測試完畢。

為了得到一段干凈的 RAM 空間范圍,我們也可以將所安排的 RAM 空間范圍進行清零操作。

3.1.3 拷貝 stage2 到 RAM 中

拷貝時要確定兩點:(1) stage2 的可執行映象在固態存儲設備的存放起始地址和終止地址;(2) RAM 空間的起始地址。

3.1.4 設置堆棧指針 sp

堆棧指針的設置是為了執行 C 語言代碼作好準備。通常我們可以把 sp 的值設置為(stage2_end-4),也即在 3.1.2 節所安排的那個 1MB 的 RAM 空間的最頂端(堆棧向下生長)。

此外,在設置堆棧指針 sp 之前,也可以關閉 led 燈,以提示用戶我們準備跳轉到 stage2。

經過上述這些執行步驟后,系統的物理內存布局應該如下圖2所示。

3.1.5 跳轉到 stage2 的 C 入口點

在上述一切都就緒后,就可以跳轉到 Boot Loader 的 stage2 去執行了。比如,在 ARM 系統中,這可以通過修改 PC 寄存器為合適的地址來實現。


圖2 bootloader 的 stage2 可執行映象剛被拷貝到 RAM 空間時的系統內存布局
?
?

3.2 Boot Loader 的 stage2

正如前面所說,stage2 的代碼通常用 C 語言來實現,以便于實現更復雜的功能和取得更好的代碼可讀性和可移植性。但是與普通 C 語言應用程序不同的是,在編譯和鏈接 boot loader 這樣的程序時,我們不能使用 glibc 庫中的任何支持函數。其原因是顯而易見的。這就給我們帶來一個問題,那就是從那里跳轉進 main() 函數呢?直接把 main() 函數的起始地址作為整個 stage2 執行映像的入口點或許是最直接的想法。但是這樣做有兩個缺點:1)無法通過main() 函數傳遞函數參數;2)無法處理 main() 函數返回的情況。一種更為巧妙的方法是利用 trampoline(彈簧床)的概念。也即,用匯編語言寫一段trampoline 小程序,并將這段 trampoline 小程序來作為 stage2 可執行映象的執行入口點。然后我們可以在 trampoline 匯編小程序中用 CPU 跳轉指令跳入 main() 函數中去執行;而當 main() 函數返回時,CPU 執行路徑顯然再次回到我們的 trampoline 程序。簡而言之,這種方法的思想就是:用這段 trampoline 小程序來作為 main() 函數的外部包裹(external wrapper)。

下面給出一個簡單的 trampoline 程序示例(來自blob):

.text .globl _trampoline _trampoline:???bl????main??????b????_trampoline

可以看出,當 main() 函數返回后,我們又用一條跳轉指令重新執行 trampoline 程序――當然也就重新執行 main() 函數,這也就是 trampoline(彈簧床)一詞的意思所在。

3.2.1初始化本階段要使用到的硬件設備

這通常包括:(1)初始化至少一個串口,以便和終端用戶進行 I/O 輸出信息;(2)初始化計時器等。

在初始化這些設備之前,也可以重新把 LED 燈點亮,以表明我們已經進入 main() 函數執行。

設備初始化完成后,可以輸出一些打印信息,程序名字字符串、版本號等。

3.2.2 檢測系統的內存映射(memory map)

所謂內存映射就是指在整個 4GB 物理地址空間中有哪些地址范圍被分配用來尋址系統的 RAM 單元。比如,在 SA-1100 CPU 中,從 0xC000,0000 開始的 512M 地址空間被用作系統的 RAM 地址空間,而在 Samsung S3C44B0X CPU 中,從 0x0c00,0000 到 0x1000,0000 之間的 64M 地址空間被用作系統的 RAM 地址空間。雖然 CPU 通常預留出一大段足夠的地址空間給系統 RAM,但是在搭建具體的嵌入式系統時卻不一定會實現 CPU 預留的全部 RAM 地址空間。也就是說,具體的嵌入式系統往往只把 CPU 預留的全部 RAM 地址空間中的一部分映射到 RAM 單元上,而讓剩下的那部分預留 RAM 地址空間處于未使用狀態。?由于上述這個事實,因此 Boot Loader 的 stage2 必須在它想干點什么 (比如,將存儲在 flash 上的內核映像讀到 RAM 空間中) 之前檢測整個系統的內存映射情況,也即它必須知道 CPU 預留的全部 RAM 地址空間中的哪些被真正映射到 RAM 地址單元,哪些是處于 "unused" 狀態的。

(1) 內存映射的描述

可以用如下數據結構來描述 RAM 地址空間中的一段連續(continuous)的地址范圍:

typedef struct memory_area_struct {???u32 start;????u32 size;????int used; } memory_area_t;

這段 RAM 地址空間中的連續地址范圍可以處于兩種狀態之一:(1)used=1,則說明這段連續的地址范圍已被實現,也即真正地被映射到 RAM 單元上。(2)used=0,則說明這段連續的地址范圍并未被系統所實現,而是處于未使用狀態。

基于上述 memory_area_t 數據結構,整個 CPU 預留的 RAM 地址空間可以用一個 memory_area_t 類型的數組來表示,如下所示:

memory_area_t memory_map[NUM_MEM_AREAS] = {???[0 ... (NUM_MEM_AREAS - 1)] = {???????.start = 0,???????.size = 0,???????.used = 0???}, };

(2) 內存映射的檢測

下面我們給出一個可用來檢測整個 RAM 地址空間內存映射情況的簡單而有效的算法:

for(i = 0; i < NUM_MEM_AREAS; i++)???memory_map[i].used = 0;for(addr = MEM_START; addr < MEM_END; addr += PAGE_SIZE)???* (u32 *)addr = 0; for(i = 0, addr = MEM_START; addr < MEM_END; addr += PAGE_SIZE) {????????調用3.1.2節中的算法test_mempage();????if ( current memory page isnot a valid ram page) {??????????????if(memory_map[i].used )???????????i++;???????continue;???}?????????if(* (u32 *)addr != 0) {???????????????if ( memory_map[i].used )???????????i++;???????continue;???}?????????if (memory_map[i].used == 0) {???????memory_map[i].start = addr;???????memory_map[i].size = PAGE_SIZE;???????memory_map[i].used = 1;???} else {???????memory_map[i].size += PAGE_SIZE;???} }?

在用上述算法檢測完系統的內存映射情況后,Boot Loader 也可以將內存映射的詳細信息打印到串口。

3.2.3 加載內核映像和根文件系統映像

(1) 規劃內存占用的布局

這里包括兩個方面:(1)內核映像所占用的內存范圍;(2)根文件系統所占用的內存范圍。在規劃內存占用的布局時,主要考慮基地址和映像的大小兩個方面。

對于內核映像,一般將其拷貝到從(MEM_START+0x8000) 這個基地址開始的大約1MB大小的內存范圍內(嵌入式 Linux 的內核一般都不操過 1MB)。為什么要把從 MEM_START 到 MEM_START+0x8000 這段 32KB 大小的內存空出來呢?這是因為 Linux 內核要在這段內存中放置一些全局數據結構,如:啟動參數和內核頁表等信息

而對于根文件系統映像,則一般將其拷貝到 MEM_START+0x0010,0000 開始的地方。如果用 Ramdisk 作為根文件系統映像,則其解壓后的大小一般是1MB。

(2)從 Flash 上拷貝

由于像 ARM 這樣的嵌入式 CPU 通常都是在統一的內存地址空間中尋址 Flash 等固態存儲設備的,因此從 Flash 上讀取數據與從 RAM 單元中讀取數據并沒有什么不同。用一個簡單的循環就可以完成從 Flash 設備上拷貝映像的工作:

while(count) {???*dest++ = *src++;????count -= 4;? };

3.2.4 設置內核的啟動參數

應該說,在將內核映像和根文件系統映像拷貝到 RAM 空間中后,就可以準備啟動 Linux 內核了。但是在調用內核之前,應該作一步準備工作,即:設置 Linux 內核的啟動參數。

Linux 2.4.x 以后的內核都期望以標記列表(tagged list)的形式來傳遞啟動參數。啟動參數標記列表以標記ATAG_CORE 開始,以標記 ATAG_NONE 結束。個標記由標識被傳遞參數的 tag_header 結構以及隨后的參數值數據結構來組成。數據結構 tag 和 tag_header 定義在 Linux 內核源碼的include/asm/setup.h 頭文件中:

#define ATAG_NONE????0x00000000 struct tag_header {???u32 size;????u32 tag; }; …… 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; };

在嵌入式 Linux 系統中,通常需要由 Boot Loader 設置的常見啟動參數有:ATAG_CORE、ATAG_MEM、ATAG_CMDLINE、ATAG_RAMDISK、ATAG_INITRD等。

比如,設置 ATAG_CORE 的代碼如下:

params = (struct tag *)BOOT_PARAMS;???params->hdr.tag = ATAG_CORE;???params->hdr.size = tag_size(tag_core);???params->u.core.flags = 0;???params->u.core.pagesize = 0;???params->u.core.rootdev = 0;???params = tag_next(params);

其中,BOOT_PARAMS 表示內核啟動參數在內存中的起始基地址,指針 params 是一個 struct tag 類型的指針。宏 tag_next() 將以指向當前標記的指針為參數,計算緊臨當前標記的下一個標記的起始地址。注意,內核的根文件系統所在的設備ID就是在這里設置的。

下面是設置內存映射情況的示例代碼:

???for(i = 0; i < NUM_MEM_AREAS; i++) {???????if(memory_map[i].used) {???????????params->hdr.tag = ATAG_MEM;???????????params->hdr.size = tag_size(tag_mem32);???????????params->u.mem.start = memory_map[i].start;???????????params->u.mem.size = memory_map[i].size;??????????????????????params = tag_next(params);???????} }?

可以看出,在 memory_map[]數組中,每一個有效的內存段都對應一個 ATAG_MEM 參數標記。

Linux 內核在啟動時可以以命令行參數的形式來接收信息,利用這一點我們可以向內核提供那些內核不能自己檢測的硬件參數信息,或者重載(override)內核自 己檢測到的信息。比如,我們用這樣一個命令行參數字符串"console=ttyS0,115200n8"來通知內核以 ttyS0 作為控制臺,且串口采用 "115200bps、無奇偶校驗、8位數據位"這樣的設置。下面是一段設置調用內核命令行參數字符串的示例代碼:

char *p;??????for(p = commandline; *p == ' '; p++)???????;??????if(*p == '\0')???????return;???params->hdr.tag = ATAG_CMDLINE;???params->hdr.size = (sizeof(struct tag_header) + strlen(p) + 1 + 4) >> 2;???strcpy(params->u.cmdline.cmdline, p);???params = tag_next(params);

請注意在上述代碼中,設置 tag_header 的大小時,必須包括字符串的終止符'\0',此外還要將字節數向上圓整4個字節,因為 tag_header 結構中的size 成員表示的是字數。

下面是設置 ATAG_INITRD 的示例代碼,它告訴內核在 RAM 中的什么地方可以找到 initrd 映象(壓縮格式)以及它的大小:

params->hdr.tag = ATAG_INITRD2;???params->hdr.size = tag_size(tag_initrd);??????params->u.initrd.start = RAMDISK_RAM_BASE;???params->u.initrd.size = INITRD_LEN;??????params = tag_next(params);?

下面是設置 ATAG_RAMDISK 的示例代碼,它告訴內核解壓后的 Ramdisk 有多大(單位是KB):

params->hdr.tag = ATAG_RAMDISK; params->hdr.size = tag_size(tag_ramdisk);??? params->u.ramdisk.start = 0; params->u.ramdisk.size = RAMDISK_SIZE;? params->u.ramdisk.flags = 1;???? params = tag_next(params);?

最后,設置 ATAG_NONE 標記,結束整個啟動參數列表:

sstatic void setup_end_tag(void) {???params->hdr.tag = ATAG_NONE;???params->hdr.size = 0; }

3.2.5 調用內核

Boot Loader 調用 Linux 內核的方法是直接跳轉到內核的第一條指令處,也即直接跳轉到 MEM_START+0x8000 地址處。在跳轉時,下列條件要滿足:

1. CPU 寄存器的設置:

  • R0=0;

  • R1=機器類型 ID;關于 Machine Type Number,可以參見?linux/arch/arm/tools/mach-types。

  • R2=啟動參數標記列表在 RAM 中起始基地址;

2. CPU 模式:

  • 必須禁止中斷(IRQs和FIQs);

  • CPU 必須 SVC 模式;

3. Cache 和 MMU 的設置:

  • MMU 必須關閉;

  • 指令 Cache 可以打開也可以關閉;

  • 數據 Cache 必須關閉;

如果用 C 語言,可以像下列示例代碼這樣來調用內核:

void (*theKernel)(int zero, int arch, u32 params_addr) =?(void (*)(int, int, u32))KERNEL_RAM_BASE; …… theKernel(0, ARCH_NUMBER, (u32) kernel_params_start);

注意,theKernel()函數調用應該永遠不返回的。如果這個調用返回,則說明出錯。



4. 關于串口終端

在 boot loader 程序的設計與實現中,沒有什么能夠比從串口終端正確地收到打印信息能更令人激動了。此外,向串口終端打印信息也是一個非常重要而又有效的調試手段。但是, 我們經常會碰到串口終端顯示亂碼或根本沒有顯示的問題。造成這個問題主要有兩種原因:(1) boot loader 對串口的初始化設置不正確。(2) 運行在 host 端的終端仿真程序對串口的設置不正確,這包括:波特率、奇偶校驗、數據位和停止位等方面的設置。

此外,有時也會碰到這樣的問題,那就是:在 boot loader 的運行過程中我們可以正確地向串口終端輸出信息,但當 boot loader 啟動內核后卻無法看到內核的啟動輸出信息。對這一問題的原因可以從以下幾個方面來考慮:

(1) 首先請確認你的內核在編譯時配置了對串口終端的支持,并配置了正確的串口驅動程序。

(2) 你的 boot loader 對串口的初始化設置可能會和內核對串口的初始化設置不一致。此外,對于諸如 s3c44b0x 這樣的 CPU,CPU 時鐘頻率的設置也會影響串口,因此如果 boot loader 和內核對其 CPU 時鐘頻率的設置不一致,也會使串口終端無法正確顯示信息。

(3) 最后,還要確認 boot loader 所用的內核基地址必須和內核映像在編譯時所用的運行基地址一致,尤其是對于 uClinux 而言。假設你的內核映像在編譯時用的基地址是 0xc0008000,但你的 boot loader 卻將它加載到 0xc0010000 處去執行,那么內核映像當然不能正確地執行了。



5. 結束語

Boot Loader 的設計與實現是一個非常復雜的過程。如果不能從串口收到那激動人心的"uncompressing linux.................. done, booting the kernel……"內核啟動信息,恐怕誰也不能說:"嗨,我的 boot loader 已經成功地轉起來了!"。

總結

以上是生活随笔為你收集整理的从Uboot到Linux技术的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

亚洲精品在线视频观看 | 欧美精品一区二区性色 | 亚洲另类交 | 日本精品视频一区 | 中文字幕专区高清在线观看 | 久久午夜影院 | 91精品欧美一区二区三区 | 天天干天天想 | 精品9999| 亚洲视频中文 | 97色综合 | 免费黄色在线网站 | 中文字幕日韩有码 | 亚洲性少妇性猛交wwww乱大交 | av在线网站大全 | 丁香在线观看完整电影视频 | 欧美成人精品欧美一级乱 | 日本久久片| 国产色视频一区二区三区qq号 | 欧美男同视频网站 | av解说在线观看 | 亚洲欧美国产精品 | 爱干视频| 久久综合久久综合九色 | 亚洲一区二区精品在线 | 水蜜桃亚洲一二三四在线 | 爱av在线网 | 亚洲无吗视频在线 | 久久色视频 | 99久久精品视频免费 | 一区二区三区四区五区在线 | 国产v亚洲v| 日日夜夜网 | 国产一级在线观看视频 | 国产精品网站 | 久久久精品 | 国产黄色片免费看 | 99热播精品 | 久久精品99国产精品日本 | 激情欧美一区二区三区 | 中文字幕的 | 就要干b | 黄色av成人在线观看 | 91免费看片黄 | 天天爽人人爽 | 久久久久久久久久久久av | 91中文字幕一区 | 99草视频 | 欧美在线视频一区二区 | 91天天视频| 日韩动态视频 | 狠狠干婷婷色 | 九九视频精品免费 | 狠狠做六月爱婷婷综合aⅴ 日本高清免费中文字幕 | 92av视频| 国产在线999 | 日精品在线观看 | 国产成人黄色在线 | 91九色蝌蚪视频网站 | 国产色在线| 国产韩国日本高清视频 | 午夜三级毛片 | 国产成人福利片 | 区一区二区三区中文字幕 | 激情欧美日韩一区二区 | 天天综合入口 | 一区二区三区在线视频观看58 | 久久一级片 | 视频一区二区三区视频 | 亚洲国产午夜视频 | 亚洲精品99久久久久中文字幕 | 久久精品在线免费观看 | www黄色软件 | 天天操网站 | 亚洲专区 国产精品 | 欧美日韩在线视频一区二区 | 人人爽人人干 | 成人一级在线观看 | 激情视频免费在线 | 人人爽夜夜爽 | 精品美女在线视频 | 91精品伦理 | 免费视频你懂得 | 99人成在线观看视频 | 欧美精品久久久久久久久免 | 91激情视频在线观看 | 天天射天天色天天干 | 91最新网址在线观看 | 国产在线a免费观看 | 精品国内 | 国产亚洲精品久久久久5区 成人h电影在线观看 | 亚洲成 人精品 | 欧美日韩精品影院 | 狠狠干.com | 国产精品18videosex性欧美 | 欧美激情精品久久久久久变态 | 亚洲理论电影网 | 日韩乱理 | 97爱| 最新一区二区三区 | 精品久久久久久综合日本 | 一区二区三区四区五区在线 | 亚洲国产资源 | 国产中的精品av小宝探花 | 国产在线国偷精品产拍 | 国产视频 久久久 | 久草在线一免费新视频 | 91中文字幕视频 | 日韩国产欧美在线播放 | 中文字幕在线观看免费观看 | 国产精品电影一区 | 亚洲电影第一页av | 黄色大全免费网站 | 日韩欧美精品在线 | 91九色蝌蚪国产 | 亚洲dvd | 国产精品激情 | 黄色毛片观看 | 超级av在线 | 精品久久久久久久久久久久久久久久久久 | 99精品视频免费看 | 日韩国产欧美在线视频 | 久草在线高清视频 | 99精品视频中文字幕 | 国产精品久久网站 | 天天射天天射天天射 | 九九热免费在线观看 | 欧美性做爰猛烈叫床潮 | 日韩系列 | 国产成人精品综合久久久久99 | 天天综合天天综合 | 成人国产在线 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 欧美一区二区视频97 | 精品亚洲一区二区三区 | 91精品一区国产高清在线gif | 日本99久久 | 亚洲天天在线 | 久9在线| 国产亚洲精品久久久久久网站 | 久久在线影院 | 91成人免费看 | 亚洲成 人精品 | 天天射天天干天天插 | 狠狠色丁婷婷日日 | 国产免费高清视频 | 麻豆极品 | 福利视频一区二区 | 全黄网站 | 91av网址 | 男女啪啪视屏 | 国内精品中文字幕 | 国产区在线视频 | 免费观看完整版无人区 | 精品国产乱码一区二 | 国产精品 中文字幕 亚洲 欧美 | 探花视频在线版播放免费观看 | 久久久久久久国产精品影院 | 月下香电影 | 黄色av大片| 91久久黄色 | 国产成人一区二区三区电影 | 69xx视频 | 欧美精品做受xxx性少妇 | 一区二区三区久久 | 国产精品 国产精品 | 精品成人免费 | 成人久久综合 | 久久99亚洲网美利坚合众国 | 国产a免费| 国产亚洲婷婷免费 | 中文免费在线观看 | 色国产精品一区在线观看 | 亚洲3级| 国产一区国产二区在线观看 | 麻豆视频入口 | 一级一片免费看 | 天天操天天色天天射 | 日韩二区三区在线观看 | 国产91国语对白在线 | 在线视频 亚洲 | 五月婷婷久草 | 天天操天天玩 | 久久草草影视免费网 | 91丨九色丨蝌蚪丨老版 | 日韩激情精品 | 免费在线观看国产精品 | 日韩成人在线一区二区 | 色婷婷成人网 | 婷婷久久丁香 | 天天综合久久 | 精品一区精品二区 | 成人午夜电影在线观看 | 8x成人在线 | 久久9精品 | 欧美色图亚洲图片 | 国产成人一区二区三区电影 | 五月开心婷婷 | 91视频免费网站 | 国语麻豆 | 午夜精品久久久久久久久久久久 | 久久国产午夜精品理论片最新版本 | 欧洲av不卡 | 97国产一区二区 | 日韩aa视频| 国产麻豆精品一区 | 99热这里精品 | 色欧美视频 | 久久久高清免费视频 | 六月丁香色婷婷 | 日本中文字幕电影在线免费观看 | 久久免费的精品国产v∧ | 亚洲日日射| 久久xx视频| 狠狠色丁香婷婷综合欧美 | 91成人免费观看视频 | 国产精品视频永久免费播放 | 日韩欧美有码在线 | 免费a视频 | 久久久久久视频 | 国产精品99久久久精品免费观看 | 久日精品| 99热这里有精品 | 婷婷激情久久 | 亚洲激情校园春色 | 热久久这里只有精品 | 九九综合久久 | 91人人爽久久涩噜噜噜 | 亚洲涩涩涩 | 涩av在线| 91av在线播放 | 中文字幕av在线不卡 | 国产一区在线视频 | 天天天色综合 | 午夜视频在线观看一区二区三区 | 国产成人亚洲精品自产在线 | 天堂麻豆| 国产黄色免费电影 | 国产成人精品在线观看 | 免费在线观看的av网站 | 久久看片网站 | 日韩视频精品在线 | 99久久这里只有精品 | 人人爽人人爽人人爽学生一级 | 国产手机av | 中文字幕区 | 91av看片| 又污又黄的网站 | 色哟哟国产精品 | 男女免费视频观看 | 亚洲精品小视频 | 色天天综合久久久久综合片 | 69国产精品视频免费观看 | 毛片精品免费在线观看 | 1024手机看片国产 | 成年人网站免费在线观看 | 成人小视频免费在线观看 | 日韩高清免费在线观看 | 一级黄色片在线免费看 | 国产丝袜制服在线 | 国产日韩精品一区二区在线观看播放 | 成年人在线看片 | 99精品在线视频观看 | 国产专区视频在线观看 | 久久亚洲综合国产精品99麻豆的功能介绍 | 91av色| 国产资源av | 日韩黄色软件 | 97狠狠操 | 国产福利91精品张津瑜 | 国产在线视频一区 | 性色av免费在线观看 | 蜜臀av麻豆 | av在线永久免费观看 | 又爽又黄又刺激的视频 | 免费在线观看日韩欧美 | 日韩免| 激情xxxx | 日韩亚洲在线观看 | 日日成人网 | 亚洲精品三级 | 成人一区影院 | 国产精品欧美 | 国产午夜在线观看视频 | 国产91在线免费视频 | 中文字幕在线影院 | 免费人成网 | av黄色国产 | 免费在线播放av电影 | 97精品久久人人爽人人爽 | 精品国产一区二区三区四区在线观看 | 天堂久色 | 国产日韩在线视频 | 天天曰| 国产精品美女久久久 | 99热这里是精品 | 激情网站五月天 | 91麻豆精品国产91久久久久 | 亚洲五月六月 | 色在线免费| 日本中文字幕一二区观 | 五月婷婷丁香网 | 国产精品区二区三区日本 | 夜夜躁日日躁狠狠久久av | 亚洲永久精品在线观看 | 超级碰碰碰碰 | 在线小视频 | 色橹橹欧美在线观看视频高清 | 超碰在线天天 | 日韩精品一区二区在线观看 | 国产高清精 | 久久婷婷久久 | 一区在线观看视频 | 东方av免费在线观看 | 亚洲黄色在线观看 | 2021av在线| av黄色在线播放 | 亚洲国产经典视频 | 亚洲视频网站在线观看 | a级片网站| 午夜av在线免费 | 亚洲视频一 | 久久麻豆精品 | 日本久久久久久久久久久 | 久久免费99 | 亚洲精品国产精品久久99热 | 久久成年人网站 | 天天插狠狠干 | 婷婷激情av | 日韩av电影中文字幕 | 久久国产福利 | 国产精品成人久久久久久久 | 日韩成人免费在线 | 天天天天天天天天操 | 中文字幕免费 | 欧美日韩在线视频一区二区 | 久久毛片网站 | 国产一二三区在线观看 | 91视频免费看片 | 国产福利专区 | 黄色国产在线 | 亚洲a成人v | 亚洲国产三级在线 | www.久久免费视频 | 91精品国产成 | 日韩精品极品视频 | 久久久久国产精品www | 亚洲综合激情小说 | 天天草天天 | 欧美一级免费黄色片 | 一级欧美黄 | 91在线精品一区二区 | 日韩精品免费在线观看视频 | 日日噜噜噜噜夜夜爽亚洲精品 | 福利在线看片 | 欧美日韩高清一区 | 麻豆网站免费观看 | 国产a级精品 | 黄色三级av | 免费福利片2019潦草影视午夜 | 丁香婷婷社区 | 天天干人人干 | 亚洲电影网站 | 亚洲一一在线 | 国产精品1000 | 视频91 | 国产视频每日更新 | 国产第一页福利影院 | 手机看片99 | japanese黑人亚洲人4k | 色大片免费看 | 亚洲成人网av | 天天曰视频 | 网站在线观看你们懂的 | 欧美性高跟鞋xxxxhd | 狠狠综合网 | 麻花豆传媒一二三产区 | 五月婷婷六月丁香在线观看 | 丁香激情综合 | 91精品在线免费视频 | 高清视频一区 | 精品视频专区 | 91最新网址 | 一区二区三区久久精品 | 久久久国产影视 | 国产高清视频 | 在线a人片免费观看视频 | 日韩一区二区三区高清在线观看 | 久久99国产一区二区三区 | 美国三级黄色大片 | 狠狠色噜噜狠狠狠狠2021天天 | 500部大龄熟乱视频使用方法 | 色综合久久久久久中文网 | 久久精品中文字幕一区二区三区 | 国产免费高清视频 | 精品国产乱码久久 | 久草网视频 | 成年一级片 | 天天艹| 香蕉久久久久 | 久久久久久久久久免费视频 | 91av国产视频 | 夜夜躁狠狠躁日日躁视频黑人 | 色播激情五月 | 99在线观看视频网站 | 欧美亚洲成人免费 | 国产成人一区二区三区电影 | 国产在线精品国自产拍影院 | 亚洲aⅴ免费在线观看 | 欧美精品免费一区二区 | 久草观看| 国产丝袜高跟 | www.色就是色 | 亚洲欧洲一区二区在线观看 | 亚洲第一中文网 | 色吧av色av | 久久精品伊人 | 91色蜜桃 | 亚洲久久视频 | 欧美日韩高清一区二区 国产亚洲免费看 | 九九久久精品 | 精品久久亚洲 | 亚洲涩涩一区 | 性色在线视频 | 网站在线观看你们懂的 | 免费在线91 | 亚洲一区二区精品在线 | 国产另类xxxxhd高清 | 国产精品高潮久久av | av蜜桃在线| 日韩欧美精品一区二区 | 免费成人av | japanesefreesexvideo高潮| 日韩av综合网站 | 亚洲黄色av一区 | a极黄色片 | 久久久久久网站 | 91在线视频免费 | 人人舔人人插 | 狠狠躁夜夜av | 欧美一级裸体视频 | av3级在线| 午夜久久久久久久久久影院 | 在线观看视频精品 | 中文在线免费看视频 | 欧美性色网站 | 亚洲精品国产日韩 | 97超碰精品 | 免费av在线播放 | 日韩av一区二区三区在线观看 | 91九色在线观看 | 国产在线黄 | 亚洲国产人午在线一二区 | 手机看片 | 久草久热 | 91久久人澡人人添人人爽欧美 | 99se视频在线观看 | 日韩视频免费 | av888av.com | 国产男女免费完整视频 | 五月天综合网站 | 干 操 插 | 欧美人操人 | 欧美久久久久久久久久久 | 精品国产乱码久久久久久1区2匹 | 4438全国亚洲精品观看视频 | 91九色最新| 精品视频国产一区 | 精品国产片 | 欧美国产一区二区 | 日韩网站免费观看 | 狠狠狠狠狠狠干 | 免费看色视频 | 在线播放国产精品 | 久久不见久久见免费影院 | 国产成人精品女人久久久 | 国产精品久久免费看 | 婷婷久久一区二区三区 | 日日日操操 | 最近2019年日本中文免费字幕 | 国产美女在线免费观看 | 国内精品久久久久久久久久久久 | 国产麻豆精品免费视频 | 天天激情在线 | 国产精品久久久久av免费 | 日本在线视频一区二区三区 | 国产精品18久久久久vr手机版特色 | 高清不卡一区二区在线 | 狠狠的日 | 91精品国产自产在线观看永久 | 国产中文字幕视频在线观看 | 日韩激情三级 | 中日韩免费视频 | 国产精品久久人 | 久久综合久色欧美综合狠狠 | 色资源二区在线视频 | 黄色www在线观看 | 欧美极品少妇xxxxⅹ欧美极品少妇xxxx亚洲精品 | 九九色在线观看 | 国产美女在线观看 | 久久精品日产第一区二区三区乱码 | 天天操夜夜拍 | 激情综合中文娱乐网 | 成人中文字幕+乱码+中文字幕 | 五月婷婷精品 | 久久亚洲视频 | 国产精品18久久久久久久久 | 日韩精品一区二区三区在线播放 | 久久久男人的天堂 | 在线视频a| 天堂va在线高清一区 | 二区三区精品 | 五月激情亚洲 | 久久久九色精品国产一区二区三区 | 亚洲春色综合另类校园电影 | 国产成人精品国内自产拍免费看 | 99久久久久久久久久 | 亚洲精品国产精品国自产观看浪潮 | 中文字幕一二三区 | 最新午夜 | 日韩精品欧美视频 | 视频在线观看一区 | 五月天中文字幕mv在线 | 国产香蕉视频 | 在线看v片成人 | 亚洲天堂网在线播放 | 国产原创在线 | 久久成年人视频 | 国产精品成人久久 | 99热精品久久 | 日本黄色免费看 | 国产看片 色 | 最近中文字幕高清字幕在线视频 | 特级黄色视频毛片 | 久久与婷婷 | 国产精品自产拍在线观看网站 | 国内视频1区 | 伊人久久在线观看 | 蜜臀av夜夜澡人人爽人人 | 丝袜少妇在线 | 在线观看中文字幕av | 粉嫩一二三区 | 三级黄色在线 | 日韩a级免费视频 | 免费看的黄网站软件 | 天天操天天综合网 | 狠狠色噜噜狠狠狠合久 | 国产在线观看污片 | 天天草夜夜 | 国产亚洲情侣一区二区无 | 国产在线视频在线观看 | 国产午夜精品一区二区三区嫩草 | 成年免费在线视频 | 在线观看www91 | 欧美成人播放 | 午夜久久影视 | 91视频免费看 | 亚洲精品短视频 | 国产一区二区精品 | 国产成人一级电影 | 欧美日韩国产一区二区三区 | 91麻豆精品一区二区三区 | 久久免费视频2 | 久久精精品 | www.伊人色.com | 91在线区 | 狠狠躁日日躁狂躁夜夜躁av | 成人av在线资源 | 伊人狠狠 | av丁香花 | 久久国产视频网站 | 日韩免费视频线观看 | 四虎在线免费观看 | 一区二区三区四区在线免费观看 | 在线黄色国产电影 | 欧美日韩性视频在线 | 亚洲一级二级三级 | 伊人影院在线观看 | 97国产精品免费 | 国产精品一区二区在线免费观看 | 欧美大片第1页 | 成人午夜剧场在线观看 | 超碰av在线免费观看 | av在线播放国产 | 美女精品在线观看 | 婷婷播播网 | 亚洲国产影院av久久久久 | 久久久久伊人 | 在线看日韩 | 5月丁香婷婷综合 | 97视频在线免费 | 国产福利一区二区三区视频 | 欧美精品久久久久久久久免 | 国产美女视频黄a视频免费 久久综合九色欧美综合狠狠 | 国产亚洲在 | 久久久国产在线视频 | 亚洲影视九九影院在线观看 | 黄色成人在线 | 人人搞人人搞 | 欧美日韩精品二区第二页 | 91视频在线免费看 | 草久久久久久久 | 日韩免费看 | 日韩极品视频在线观看 | 91中文字幕在线视频 | 亚洲精品国产精品国 | 亚洲国产成人久久综合 | 国产无吗一区二区三区在线欢 | 91在线免费视频观看 | 欧美日韩一区二区三区免费视频 | 欧美一二区视频 | 亚洲人成在 | 国产精品福利久久久 | 日韩一二三在线 | 国产剧情一区二区在线观看 | 久艹视频在线免费观看 | 天天操天天综合网 | 亚洲成人一二三 | 蜜桃av人人夜夜澡人人爽 | 精品视频免费久久久看 | 成人亚洲综合 | 色婷婷丁香 | 少妇bbw揉bbb欧美 | 91免费在线视频 | 国产福利免费看 | 久久久久免费精品视频 | 亚洲精品456在线播放 | 欧美黑人巨大xxxxx | 国产97在线视频 | 日本久久精品视频 | 九九视频这里只有精品 | 五月av在线 | 99久久国产免费,99久久国产免费大片 | 99视频久| 超碰成人免费电影 | 久久永久免费视频 | 色狠狠综合天天综合综合 | 亚州精品一二三区 | 一区二区亚洲精品 | 国产免费一区二区三区最新 | 亚洲电影在线看 | 在线免费看黄色 | 婷婷色综合网 | 日韩av专区| 97人人超碰在线 | 国产成人福利在线观看 | 成人免费观看视频大全 | 久热电影 | 777视频在线观看 | 欧美一级黄大片 | 精品一区电影 | 国产视频69 | 国产精品白浆视频 | 91av免费观看 | 亚洲japanese制服美女 | 中文字幕在线观看网 | 97免费在线观看视频 | 国产午夜精品一区二区三区 | 99在线视频观看 | 色视频网站在线观看一=区 a视频免费在线观看 | 丁香电影小说免费视频观看 | 日韩精品一区二区三区高清免费 | 亚洲国产美女久久久久 | 91亚洲精品久久久蜜桃 | 中文字幕一区二区三区精华液 | 免费看的国产视频网站 | 午夜精品区 | 福利视频一二区 | 久草久热| 成人一区电影 | 亚洲va欧美va人人爽春色影视 | 91最新在线观看 | 人人澡视频 | 九色91在线 | 亚洲精品五月 | 91av影视| 色妞久久福利网 | 亚洲高清网站 | 欧美日韩不卡在线视频 | 在线观看av国产 | 午夜精品99久久免费 | 国产99久久久国产精品 | 美女视频一区二区 | 国产尤物一区二区三区 | 精品国产理论片 | 欧美日韩免费一区二区三区 | 天天操天天射天天舔 | 国内精品久久久久久久久 | 国产精品日韩在线 | 99久久99久久精品 | 99在线高清视频在线播放 | 日韩和的一区二在线 | 91精品一区二区三区蜜桃 | 97av在线视频免费播放 | 国产99一区 | 久久女教师 | 成年人免费观看国产 | 97超碰人人澡 | 中文字幕在线观看视频免费 | av一级片 | 国产电影一区二区三区四区 | 99视频精品免费视频 | 欧美一区二区三区激情视频 | 中文字幕不卡在线88 | 国产成人a亚洲精品v | 韩国视频一区二区三区 | 久久久麻豆 | 色吧久久 | 精品国产一区二区三区男人吃奶 | 国产91在线播放 | 香蕉视频4aa | 色播五月激情综合网 | 黄色福利视频网站 | 日韩精品亚洲专区在线观看 | 久久久午夜剧场 | 韩国三级在线一区 | 69视频在线播放 | 免费看黄网站在线 | 美女视频黄在线 | 亚洲精品中文在线资源 | 亚洲精品乱码久久久久v最新版 | 狠狠色丁香久久婷婷综 | 黄网站a | av中文字幕av | 很黄很黄的网站免费的 | 麻豆一级视频 | 国产一级性生活 | 久久欧洲视频 | 国产精品美女久久久久久网站 | 国产成人免费观看久久久 | 黄色成人毛片 | 国产精品久久久久一区二区国产 | 在线免费观看视频一区二区三区 | www.夜色321.com | 中文字幕在线播放视频 | 成人av电影在线播放 | 丁香六月欧美 | 9i看片成人免费看片 | 久久手机免费观看 | 日韩精品久久久久久久电影竹菊 | 少妇bbb搡bbbb搡bbbb | 精品国产免费一区二区三区五区 | 日韩免费大片 | www.av免费| av在线com | 国产91精品久久久久久 | 免费看特级毛片 | 国产成人精品不卡 | 九九三级毛片 | 亚洲无线视频 | 亚洲国产丝袜在线观看 | 国产日女人 | 免费久久久久久 | 人人干人人上 | www.com.黄| 中文一二区 | 国产日本在线观看 | 懂色av一区二区在线播放 | 久久精品艹| 婷婷久久五月 | 中文字幕色综合网 | 91看片淫黄大片在线播放 | 黄色免费网站大全 | 337p日本欧洲亚洲大胆裸体艺术 | 一区二区三区韩国免费中文网站 | 六月丁香激情网 | 在线黄色av电影 | 综合五月婷婷 | 亚洲一级久久 | 精品国产日本 | 亚洲精品国产品国语在线 | 美女视频黄在线观看 | 久久午夜免费观看 | 国内亚洲精品 | 在线黄频| 伊人伊成久久人综合网小说 | 国产精久久久 | 国产3p视频 | 久久69精品| 中文字幕色综合网 | 成人av在线一区二区 | 国产精品久久久久久久免费大片 | 亚洲综合欧美日韩狠狠色 | 西西4444www大胆无视频 | 精品国产三级a∨在线欧美 免费一级片在线观看 | 精品国产一区二区三区日日嗨 | 成人av中文字幕 | 成人在线播放免费观看 | 中文字幕 影院 | 婷婷中文字幕 | 欧美日韩视频在线观看一区二区 | 人人插人人爱 | 字幕网资源站中文字幕 | 精品一区中文字幕 | 操天天操 | www.日本色 | 色综合国产 | 久久中文精品视频 | 麻豆视频免费在线播放 | 在线观看一区二区视频 | 日韩美视频 | 日韩欧美在线观看一区二区三区 | 日本最新一区二区三区 | 91久久精品日日躁夜夜躁国产 | 日韩av一区二区在线影视 | 夜添久久精品亚洲国产精品 | 97色免费视频 | 亚洲国产色一区 | 国产xvideos免费视频播放 | 天天操天天摸天天射 | 国产亚洲精品女人久久久久久 | 最新av电影网站 | 久久久999 | 91久久丝袜国产露脸动漫 | 日韩在线短视频 | 日韩一区正在播放 | 在线v片| 夜夜操天天干, | 久久综合精品国产一区二区三区 | 欧美色图亚洲图片 | 五月婷婷狠狠 | 国产成人在线看 | 精品国产一区二区三区在线观看 | 国产精品久久久久久一二三四五 | 免费又黄又爽视频 | 福利视频网站 | 手机av电影在线观看 | 香蕉免费 | 男女精品久久 | 人人爽人人爽人人片 | 激情xxxx | 国产精品久久毛片 | 黄色av观看| av中文字幕av| 日韩在线视频不卡 | 成人性生交大片免费看中文网站 | 99久热精品 | 天天插天天狠天天透 | 99久久精品免费看国产免费软件 | 精品国产欧美一区二区三区不卡 | 久久综合狠狠综合久久狠狠色综合 | 日韩资源在线 | 国产伦精品一区二区三区无广告 | 91在线91 | 欧美日韩国产在线一区 | 欧美精品在线一区 | 中文字幕在线不卡国产视频 | 久久国产日韩 | 欧美日韩国产精品一区二区亚洲 | 天天干,天天射,天天操,天天摸 | 国产一区 在线播放 | 黄色网www| 久久精品永久免费 | 狠狠色丁香婷婷综合久小说久 | 免费看一级 | 黄色片免费电影 | 亚洲精品看片 | 久久激五月天综合精品 | 中文在线a∨在线 | 免费h精品视频在线播放 | 91色网址| 日韩天天综合 | 久久久av电影 | 干狠狠 | 日韩av电影一区 | 天天干天天操天天射 | 91精品视频免费看 | 久久国产精彩视频 | 日韩高清毛片 | 精品夜夜嗨av一区二区三区 | 黄色大片日本免费大片 | 尤物九九久久国产精品的分类 | 伊人永久 | 欧美激情在线网站 | 激情电影影院 | 免费在线成人av电影 | 久草网视频在线观看 | 亚洲精品国产品国语在线 | 欧美精品久久久久久久久久白贞 | 2019久久精品 | 麻花豆传媒mv在线观看网站 | 国产黄色大片免费看 | 91福利在线导航 | 久久区二区 | 亚洲成人一区 | 97人人模人人爽人人少妇 | 九热精品| 六月激情丁香 | 国产乱对白刺激视频不卡 | 久久久国产精品久久久 | 亚洲精品国产片 | 高清av免费看 | 成人黄色av免费在线观看 | 日韩在线视 | 日本中文乱码卡一卡二新区 | 亚洲 欧美 变态 国产 另类 | 激情综合五月 | 毛片激情永久免费 | 欧美激情精品久久 | 精品欧美一区二区三区久久久 | 久草视频在线免费 | 激情视频在线观看网址 | 国产成人高清 | 精品一区二区三区四区在线 | 欧美色图另类 | 久久无码精品一区二区三区 | 色先锋av资源中文字幕 | 中文字幕在线观看的网站 | 日韩在线第一区 | 最近日本字幕mv免费观看在线 | 人人干干人人 | 国产精品国产三级国产不产一地 | 97av视频在线 | 欧美激情第一页xxx 午夜性福利 | 国产九九九精品视频 | 国产精品久久久久国产a级 激情综合中文娱乐网 | 天天操天天吃 | 中文字幕色综合网 | 成人av网站在线播放 | 99久久婷婷国产精品综合 | 国产欧美在线一区 | 欧美一二三区在线观看 | 日韩久久久久久久久久久久 | 亚洲精品永久免费视频 | 黄色av电影免费观看 | 999精品视频| 在线精品观看国产 | 国产码电影 | 操操操综合 | 久日视频 | 久久精品一级片 | 国产在线高清 | 亚洲人片在线观看 | 久久午夜网 | 久久字幕 | 夜夜躁日日躁狠狠久久88av | 国产流白浆高潮在线观看 | 国产女人18毛片水真多18精品 | 999国内精品永久免费视频 | 91免费网| 国产精品网址在线观看 | 色在线观看网站 | 日韩中字在线观看 | 区一区二区三区中文字幕 | 久久久久久亚洲精品 | 亚洲一级电影视频 | 国产91欧美 | 久久久高清| www.色五月| 日日干网址 | 欧美成人999 | 国产日韩在线观看一区 | 欧美日韩国产在线一区 | 国内精品视频在线播放 | 亚洲性xxxx | 国产精品1区2区在线观看 | jizz18欧美18| 青青色影院 | 精品视频久久久 | 日本在线观看中文字幕无线观看 | 伊人资源视频在线 | 天天操天天谢 | 亚洲精品久久久久久久不卡四虎 | 日本视频网 | 天天久久夜夜 | 九色精品| 国产亚洲婷婷免费 | 久久综合中文字幕 | 中文字幕在线视频免费播放 | 久久涩视频 | 久久草视频 | 日本激情视频中文字幕 | 欧美日韩中文在线 | 97人人爽人人 | 日韩免费视频观看 | 伊人天天操 | 日本午夜在线观看 | 国产原创中文在线 | 91免费在线播放 | 青青河边草免费观看完整版高清 | 亚洲欧洲av | 久久精品视频在线免费观看 | 久久超级碰视频 | 日韩一级片观看 | 国产精品 日本 | 免费在线激情电影 | 成人av免费在线观看 | 91亚洲欧美| 久久久精品二区 | 91在线免费视频 | 欧美一二三四在线 | 精品久久99 | 网址你懂的在线观看 | 日本久久久久久 | 91在线一区二区 | 欧美日韩在线观看一区二区 | av五月婷婷| 国产精品久久久久久久免费大片 |