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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

内核启动全过程

發布時間:2023/12/14 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 内核启动全过程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

?

內核啟動全過程

標簽:?linuxlinux內核flash嵌入式buffer數據結構

2011-10-21 01:19?4976人閱讀?評論(0)?收藏?舉報

?分類:

?

編程技巧(9)?

?

摘要

我們在這里討論的是對嵌入式linux系統的啟動過程的輸出信息的注釋,通過我們的討論,大家會對嵌入式linux啟動過程中出現的、以前感覺熟悉的、但卻又似是而非的東西有一個確切的了解,并且能了解到這些輸出信息的來龍去脈。

嵌入式linux的啟動信息是一個很值得我們去好好研究的東西,它能將一幅縮影圖呈現在我們面前,來指導我們更加深入地理解linux內核。

?

關鍵字:linux,嵌入式,啟動,bootloader

正文

作為一名嵌入系統開發者,你一定遇到過下面的情景:

在某論壇上看到一篇帖子,上面貼著嵌入式linux開發板啟動時的有關信息,然后大家在帖子里討論著這個啟動過程中出現的問題,隨機舉例如下:

?

Linux version 2.4.20-uc0 (root@Local) (gcc version 2.95.3?
20010315 (release)(ColdFire patches - 20010318 from?http://f?
(uClinux XIP and shared lib patches from?http://www.snapgear.com/)) #20 三 6月 1?
8 00:58:31 CST 2003?
Processor: Samsung S3C4510B revision 6?
Architecture: SNDS100?
On node 0 totalpages: 4096?
zone(0): 0 pages.?
zone(1): 4096 pages.?
zone(2): 0 pages.?
Kernel command line: root=/dev/rom0?
Calibrating delay loop... 49.76 BogoMIPS?
Memory: 16MB = 16MB total?
Memory: 14348KB available (1615K code, 156K data, 40K init)?
Dentry cache hash table entries: 2048 (order: 2, 16384 bytes)?
Inode cache hash table entries: 1024 (order: 1,?
Mount-cache hash table entries: 512 (order: 0, 4096 bytes)?
Buffer-cache hash table entries: 1024 (order: 0, 4096 bytes)?
Page-cache hash table entries: 4096 (order: 2, 16384 bytes)?
POSIX conformance testing by UNIFIX?
Linux NET4.0 for Linux 2.4?
Based upon Swansea University Computer Society NET3.039?
Initializing RT netlink socket?
Starting kswapd?
Samsung S3C4510 Serial driver version 0.9 (2001-12-27) with no serial options en?
abled?
ttyS00 at 0x3ffd000 (irq = 5) is a S3C4510B?
ttyS01 at 0x3ffe000 (irq = 7) is a S3C451?
Blkmem copyright 1998,1999 D. Jeff Dionne?
Blkmem copyright 1998 Kenneth Albanowski?
Blkmem 1 disk images:?
0: BE558-1A5D57 [VIRTUAL BE558-1A5D57] (RO)?
RAMDISK driver initialized: 16 RAM disks of 1024K size 1024 blocksize?
Samsung S3C4510 Ethernet driver version 0.1 (2002-02-20) <mac@os.nctu.edu.tw>?
eth0: 00:40:95:36:35:34?
NET4: Linux TCP/IP 1.0 for NET4.0?
IP Protocols: ICMP, UDP, TCP?
IP: routing cache hash table of 512 buckets, 4Kbytes?
TCP: Hash tables configured (established 1024 bind 1024)?
VFS: Mounted root (romfs?
Freeing init memory: 40K

上面的這些輸出信息,也可能包括你自己正在做的嵌入式linux開發板的輸出信息,其中的每一行,每一個字的含義,你是否深究過,或者說大部分的含義你能確切地知道的?本人想在這里結合本人在實踐中一些體會來和廣大嵌入式linux的開發者一起讀懂這些信息。

我們在這里將以一個真實的嵌入式linux系統的啟動過程為例,來分析這些輸出信息。啟動信息的原始內容將用標記標出,以區別與注釋。

?

嵌入式linux的啟動主要分為兩個階段:

①???? 第一部分bootloader啟動階段

②???? 第二部分linux 內核初始化和啟動階段

第一節:start_kernel

第二節:用戶模式( user_mode )開始,start_kernel結束

第三節:加載linux內核完畢,轉入cpu_idle進程

?

第一部分 : bootloader啟動

Boot loader v0.12

NOTE: this boot loader is designed to boot kernels made with the

2.4.xx releases

bootloader for XV

Built at Nov 20 2005 10:12:35

Bootloader頭信息,版本,編譯時間等,這個因不同的bootloader的設計而有所不同,由此你能看出bootloader的版本信息,有很多使用的是通用的bootloader,如u-boot,redboot等。

Loaded to 0x90060000

將bootloader加載到內存ram中的0x90060000處,即將bootloader加載到內存的高端地址處。

Linux內核將被bootloader加載到0x90090000處。

?

Found boot configuration

查找到了啟動boot的配置信息

?

Booted from parallel flash

從flash中啟動代碼,此處的flash為并行閃存。Flash的分類列舉如下:

閃存分三類:并行,串行,不可擦除。

①并行Parallel flash

 NOR Flash,Intel于1988年發明.隨機讀取的速度比較快,隨機按字節寫,每次可以傳輸8Bit。一般適合應用于數據/程序的存貯應用中.NOR還可以片內執行(execute-in-place)XIP.寫入和擦除速度很低。

 NAND Flash,1989年,東芝公司發明.是以塊和頁為單位來讀寫的,不能隨機訪問某個指定的點.因而相對來說讀取速度較慢,而擦除和寫入的速度則比較快,每次可以傳輸16Bit,一般適用在大容量的多媒體應用中,容量大。如:CF,SM.

②串行Serial Flash 是以字節進行傳輸的,每次可以傳輸1-2Bit.如:MMC,SD,MS卡.串行閃存器件體積小,引腳也少,成本相對也更低廉。 

③不可擦除Mask Rom Flash的特點是一次性錄入數據,具有不可更改性,經常運用于游戲和需版權保護文件等的錄入。其顯著特點是成本低。

注意:任何flash器件的寫入操作只能在空或已擦除的單元內進行,所以大多數情況下,在進行寫入操作之前必須先執行擦除。NAND器件執行擦除操作是十分簡單的,而NOR則要求在進行擦除前先要將目標塊內所有的位都寫為0。

從上面的信息,我們可以對flash類型特點有個比較明確的了解。

?

CPU clock rate: 200 MHz

開發板上所使用的CPU的主頻為200MHZ.

?

DRAM size is 128MB (128MB/0MB)

動態內存ram大小為128M。這里我們列舉一下內存的類型及工作原理。

根據內存的工作原理可以劃分出兩種內存:DRAM和SRAM

①DRAM表示動態隨機存取存儲器。這是一種以電荷形式進行存儲的半導體存儲器。DRAM中的每個存儲單元由一個晶體管和一個電容器組成。數據存儲在電容器中。電容器會由于漏電而導致電荷丟失,因而DRAM器件是不穩定的。為了將數據保存在存儲器中,DRAM器件必須有規律地進行刷新。

②SRAM是靜態的,因此只要供電它就會保持一個值。一般而言,SRAM 比DRAM要快,這是因為SRAM沒有刷新周期。每個SRAM存儲單元由6個晶體管組成,而DRAM存儲單元由一個晶體管和一個電容器組成。相比而言,DRAM比SRAM每個存儲單元的成本要高。照此推理,可以斷定在給定的固定區域內DRAM的密度比SRAM 的密度要大。

?

SRAM常常用于高速緩沖存儲器,因為它有更高的速率;而DRAM常常用于PC中的主存儲器,因為其擁有更高的密度。

在嵌入式系統中使用DRAM內存的設計比較廣泛。

?

地址輔助說明:

先說明一下內存地址數字情況,主要是為了方便記憶。

可以訪問的內存為4G。

0x40000000是1GB處;0x00040000是256K處,0x00020000是128K處,0x90000000是2GB多的地方。

1M->0x00100000,

2M->0x00200000,

8M->0x00800000

16M->0x01000000,

32M->0x02000000

256M->0x10000000

64K->0x00010000

4K->0x00001000

這個是個快速記憶的方法,你可以根據地址中1的位置和其后0的個數來快速知道換算后的地址是在多少兆的地方。比如,1的后面5個0,代表1M的大小,6個0,代表16M,以此類推。

?

?

ROMFS found at 0x46040000, Volume name = rom 43f291aa

romfs,只讀文件系統所在的地址為:0x46040000 (flash映射后的第3分區)。

卷名為rom。

romfs和rootfs概念上有所區別。

?

flash在內存中的的起始地址為0x46000000,而ROMFS在flash分區上的起始位置為0x00040000,所以ROMFS在內存地址中的位置就為0x46040000。這個細節的部分可以參考flash分區時的地方,Creating 3 MTD partitions。

?

romfs中包括kernel和app應用,不包括bootloader和firmware信息頭。romfs只讀文件系統里的內容有很多種分類方法,我們可以將kernel和app同時放里面,作為根文件系統下的一個文件,也可以在flash上另外劃分區域來分別存放。

?

VFS虛擬文件系統交換器

在linux系統中,目前已經開發出多種文件系統,那么如何讓這些文件系統能共存在一個系統中呢,從linux 2.0開始,引入了虛擬文件系統管理器 VFS的概念。

Linux 下的文件系統主要可分為三大塊:

①???? 一是上層的文件系統的系統調用,

②???? 二是虛擬文件系統交換器 VFS(Virtual Filesystem Switch),

③???? 三是掛載到 VFS 中的各實際文件系統,例如 ext2,jffs 等。

VFS的確切叫法是Virtual Filesystem Switch虛擬文件系統交換器,這里的VFS中的“S”是指的switch,這個需要強調一下的,它很容易被混淆成“system”,如果理解成“system”將是不正確的,請多加注意。

VFS是具體文件系統filesystem的一個管理器。

VFS是Linux內核中的一個軟件層,一種軟件機制,它也提供了內核中的一個抽象功能,允許不同的文件系統共存,可以稱它為 Linux 的文件系統管理者,與它相關的數據結構只存在于物理內存當中。所以在每次系統初始化期間,Linux 都首先要在內存當中構造一棵 VFS 的目錄樹。VFS 中的各目錄其主要用途是用來提供實際文件系統的掛載點。而rootfs將是這個目錄樹的根結點的(root),即 "/"目錄,VFS的結構就是從這個rootfs開始的。有了VFS,那么對文件的操作將使用統一的接口,將來通過文件系統調用對 VFS 發起的文件操作等指令將被 rootfs 文件系統中相應的函數接口所接管。

?

注意:rootfs并不是一個具體的文件系統類型,如jffs。它只是一個理論上的概念。在具體的嵌入系統實例中,可以將某種具體的文件系統設置為根文件系統rootfs,如我們可以設置romfs為根文件系統,也可以設置jffs為根文件系統。

?

這里的ROMFS只讀文件系統只是一種具體的文件系統類型,也是在嵌入系統中經常使用到的類型。

?

看完了上面的內容,以后你對出現的類似“kernel Panic:VFS:Unable to mount root fs on 0:00”的含義應該已經了解了。其中“VFS:”就是虛擬文件系統管理器操作時的輸出信息了。

File linux.bin.gz found

linux kernel內核文件名,它是在只讀文件系統romfs上的一個組成部分。

Unzipping image from 0x4639DE60 to 0x90090000, size = 1316021

將romfs中的linux kernel解壓縮到0x90090000,之后會從這個內存地址啟動內核。romfs為壓縮格式文件,使用壓縮的只讀文件系統,是為了保持制作出來的整個系統所占用的flash空間減小。這個內核的大小為1.3M左右,這也是目前大多數嵌入系統所使用的方法。

Inptr = 0x00000014(20)

Inflating....

釋放,解壓中。。。(變大,充氣, 膨脹)

Outcnt = 0x0030e7c8(3205064)

Final Inptr = 0x001414ad(1316013)

Original CRC = 0xcbd73adb

Computed CRC = 0xcbd73adb

做釋放后的CRC檢查

Boot kernel at 0x90090000 with ROMFS at 0x46040000

kernel已經被從romfs中釋放到內存地址0x90090000處,可以跳轉到此處啟動kernel了,這里是指定的kernel的起始地址

Press 'enter' to boot

系統等待啟動,后面將看到linux kernel的啟動過程了。

?

第二部分 : linux內核初始化以及啟動

第一節:start_kernel

Linux的源代碼可以從www.kernel.org得到,或者你可以查看linux代碼交叉引用網站:http://lxr.linux.no/?進行在線的代碼查看,這是一個很好的工具網站。

在start_kernel中將調用到大量的init函數,來完成內核的各種初始化。如:

page_address_init();

sched_init();

page_alloc_init();

init_IRQ();

softirq_init();

console_init();

calibrate_delay();

vfs_caches_init(num_physpages);

rest_init();

具體內容可以參考[http://lxr.linux.no/source/init/main.c]

Linux version 2.4.22-uc0 (root@local) (gcc version 2.95.3 20010315 (release)) #33 .?1.. 20 12:09:106

上面的代碼輸出信息,是跟蹤linux代碼分析后得到的,進入init目錄下的main.c的start_kernel啟動函數.

嵌入式linux使用的是linux內核版本為2.4.22

linux source code代碼中start_kernel中輸出的linux_banner信息。這個信息是每個linux kernel都會打印一下的信息,如果你沒有把這句去掉的話。

?

Found bootloader memory map at 0x10000fc0.

bootloader經過內存映射后的地址為:0x10000fc0, 按上面的地址換算方法,1后面有7個0,那么虛擬地址256M左右處。

Processor: ARM pt110 revision 0

pT110是ARM微處理器arm核的一種,另一種為pT100。此處為顯示ARM的類型。

On node 0 totalpages: 20480

zone(0): 20480 pages.

zone(0): Set minimum memory threshold to 12288KB

Warning: wrong zone alignment (0x90080000, 0x0000000c, 0x00001000)

zone(1): 0 pages.

zone(2): 0 pages.

預留內存大小,在節點0上總共20頁, zone(0) 設置最小內存為12MB, zone(1)和zone(2)為0頁。警告:對齊不正確

Kernel command line: root=/dev/mtdblock3

Kernel 啟動命令設為:/dev/mtdblock3(在后面的說明中會看到mtdblock3是指的flash上的romfs分區。),用來指定根文件系統所在的位置,kernel會將塊設備mtdblock3當作文件系統來處理。

也就是說,內核會根據上面的kernel命令行,知道只讀文件系統romfs將是根文件系統rootfs。

start_kernel(void)中輸出的上面的這句信息。

這行命令是在linux內核啟動過程中都會輸出的一句。

Console: colour dummy device 80x30

代碼中console_init()的輸出信息, 顯示控制臺屬性:一般使用VGA text console,標準是80 X 25行列的文本控制臺,這里是對屬性進行了設置。

serial_xx: setup_console @ 115

串口設置值為115200,此為波特率輸出信息。對串口設置的信息做一個打印的動作,在調試時會非常有用。

Calibrating delay loop... 82.94 BogoMIPS

Calibrate:校準, 進入時延校準循環。檢查CPU的MIPS(每秒百萬條指令),Bogo是Bogus(偽)的意思。這里是對CPU進行一個實時測試,來得到一個大體的MIPS數值

Bogomips,是由linus Torvalds寫的, 是Linux操作系統中衡量計算機處理器運行速度的一種尺度。提供這種度量的程序被稱為BogoMips,當啟動計算機時,BogoMips能顯示系統選項是否處于最佳性能。

linux內核中有一個函數calibrate_delay(),它可以計算出cpu在一秒鐘內執行了多少次一個極短的循環,計算出來的值經過處理后得到BogoMIPS值

你可以將計算機的bogomips與計算機處理器的bogomips進行比較。Torvalds稱這個程序為BogoMips來暗示兩臺計算機間的性能度量是錯誤的,因為并非所有起作用因素都能被顯示出來或被認可。盡管計算機基準中經常用到MIPS,但環境的變化容易導致度量的錯誤。Bogomips能測出一秒鐘內某程序運行了多少次。

察看/proc/cpuinfo文件中的最后一行也能得到這個數值。

上面這個輸出,在所有的linux系統啟動中都會打印出來。

?

進入內存初始化

mem_init(void), [arch/i386/mm/init.c]

Memory: 80MB = 80MB total

Memory: 76592KB available (1724K code, 2565K data, 72K init)

當前內存使用情況,將列出總的內存大小, 及分配給內核的內存大小:包括代碼部分,數據部分,初始化部分,總共剛好4M。請留意此處的內核的內存大小的各個值。

?

進入虛擬文件系統VFS初始化

vfs_caches_init()

Dentry cache hash table entries: 16384 (order: 5, 131072 bytes)

Inode cache hash table entries: 8192 (order: 4, 65536 bytes)

Mount cache hash table entries: 512 (order: 0, 4096 bytes)

Buffer cache hash table entries: 4096 (order: 2, 16384 bytes)

Page-cache hash table entries: 32768 (order: 5, 131072 bytes)

名詞:

①???? Dentry:目錄數據結構

②???? Inode:i節點

③???? Mount cache:文件系統加載緩沖

④???? buffer cache:內存緩沖區

⑤???? Page Cache:頁緩沖區

Dentry目錄數據結構(目錄入口緩存),提供了一個將路徑名轉化為特定的dentry的一個快的查找機制,Dentry只存在于RAM中;

i節點(inode)數據結構存放磁盤上的一個文件或目錄的信息,i節點存在于磁盤驅動器上;存在于RAM中的i節點就是VFS的i節點,dentry所包含的指針指向的就是它;

buffer cache內存緩沖區,類似kupdated,用來在內存與磁盤間做緩沖處理;

Page Cache 用來加快對磁盤上映像和數據的訪問。

在內存中建立各個緩沖hash表,為kernel對文件系統的訪問做準備。

VFS(virtual filesystem switch)虛擬文件切換目錄樹有用到類似這樣的結構表。

上面的輸出信息,在一般的linux啟動過程中都會看到。

POSIX conformance testing by UNIFIX

conformance:順應, 一致。即POSIX適應性檢測。UNIFIX是一家德國的技術公司,Linux 原本要基于 POSIX.1 的, 但是 POSIX 不是免費的, 而且 POSIX.1 證書相當昂貴. 這使得 Linux 基于 POSIX 開發相當困難. Unifix公司(Braunschweig, 德國) 開發了一個獲得了 FIPS 151-2 證書的 Linux 系統. 這種技術用于 Unifix 的發行版 Unifix Linux 2.0 和 Lasermoon 的 Linux-FT。

在2.6的內核中就將上面的這句輸出給拿掉了。

?

第二節:用戶模式( user_mode )開始,start_kernel結束

PCI: bus0: Fast back to back transfers disabled

PCI: Configured XX as a PCI slave with 128MB PCI memory

PCI: Each Region size is 16384KB

PCI: Reserved memory from 0x10080000 to 0x15080000 for DMA and mapped to 0x12000000

設備的初始化 init()--->do_basic_init()--->pci_init(),初始化PCI,檢測系統的PCI設備。

Linux NET4.0 for Linux 2.4

Based upon Swansea University Computer Society NET3.039

英國威爾士,斯旺西大學的NET3.039, TCP/IP 協議棧

此信息,在linux啟動過程中都會出現。

Initializing RT netlink socket

對Socket的初始化,socket_init(),Netlink 一種路由器管理協議(linux-2.4.22\net\core\Rtnetlink.c,Routing netlink socket interface: protocol independent part。 其中RT是route路由的意思。這句輸出是在create產生rtnetlink的socket套接字時的一個調試輸出。)

此信息,在linux啟動過程中都會出現。

Starting kswapd

啟動交換守護進程kswapd,進程IO操作例程kpiod

kswapd可以配合kpiod運行。進程有時候無事可做,當它運行時也不一定需要把其所有的代碼和數據都放在內存中。這就意味著我們可以通過把運行中程序不用的內容切換到交換分區來更好的是利用內存。大約每隔1秒,kswapd醒來并檢查內存情況。如果在硬盤的東西要讀入內存,或者內存可用空間不足,kpiod就會被調用來做移入/移出操作。kswapd負責檢查,kpiod負責移動。

Journalled Block Device driver loaded

加載日志塊設備驅動。

日志塊設備是用來對文件系統進行日志記錄的一個塊設備。日志文件系統是在傳統文件系統的基礎上,加入文件系統更改的日志記錄。

它的設計思想是:跟蹤記錄文件系統的變化,并將變化內容記錄入日志。日志文件系統在磁盤分區中保存有日志記錄,寫操作首先是對記錄文件進行操作,若整個寫操作由于某種原因(如系統掉電)而 中斷,系統重啟時,會根據日志記錄來恢復中斷前的寫操作。在日志文件系統中,所有的文件系統的變化都被記錄到日志,每隔一定時間,文件系統會將更新后的元 數據及文件內容寫入磁盤。在對元數據做任何改變以前,文件系統驅動程序會向日志中寫入一個條目,這個條目描述了它將要做些什么,然后它修改元數據。

devfs: v1.12c (20020818) Richard Gooch (rgooch@atnf.csiro.au)

devfs: boot_options: 0x1

Devfs模塊的輸出信息。

設備文件系統devfs,版本1.12c,

pty: 256 Unix98 ptys configured

Pty模塊的輸出信息,與控制臺操作有關的設置。

將通過 devpts 文件系統使用 Unix98 PTYs,(Pseudo-ttys (telnet etc) device是偽ttys設備的縮寫。

①????????????? TTY(/dev/tty)是TeleTYpe的一個老縮寫,為用戶輸入提供不同控制臺的設備驅動程序。它的名字來源于實際掛接到 UNIX系統的、被稱為電傳打字機(teletype)的終端。在Linux下,這些文件提供對虛擬控制臺的支持,可以通過按<Alt-F1>到<Alt-F6>鍵來訪問這些虛擬控制臺。這些虛擬控制臺提供獨立的、同時進行的本地登錄對話過程

②????????????? ttys(/dev/ttys)是計算機終端的串行接口。/dev/ttyS0對應MS-DOS下的 COM1。

?

使用 make dev腳本MAKEDEV來建立pty文件。這樣系統內核就支持Unix98風格的pty了。在進行Telnet登錄時將要用到/dev/pty設備。 pty是偽終端設備,在遠程登錄等需要以終端方式進行連接,但又并非真實終端的應用程序中必須使用這種設備,如telnet或xterm等程序。Linux 2.2以后增添了UNIX98風格的Pty設備,它使用一個新的文件系統(devpts針對偽終端的文件系統)和一個克隆的設備cloning device來實現其功能。

linux-2.4.22\drivers\char\Pty.c, 在devfs_mk_dir (NULL, "pts", NULL);時會輸出上面的信息。

?

loop: loaded (max 8 devices)

加載返還塊設備驅動,最多支持8個設備

?

8139too Fast Ethernet driver 0.9.27

eth0: RealTek RTL8139 at 0x60112000, 00:10:0d:42:a0:03, IRQ 14

eth0: Identified 8139 chip type 'RTL-8100B/8139D'

網卡驅動,基地址為:0x60112000, MAC地址:00:10:0d:42:a0:03, 中斷號:14

RTL8139 的 接收路徑設計成一個環形緩沖區(一段線性的內存,映射成一個環形內存)。當設備接收到數據時,數據的內容就保存在這個環形緩沖區內并更新下個存儲數據的地 址(第一個數據包的開始地址+第一個數據包的長度)。設備會一直保留緩沖區內的數據直到整個緩沖區耗盡。這樣,設備會再次重寫緩沖區內起始位置的內容,就 像一個環那樣。

從 2.2 版內核升級到 2.4 版時, RTL-8139 支持模塊已不再叫 rtl8139,而叫它 8139too,現在你再看到8139too就不會不明白它的來由了吧。

SCSI subsystem driver Revision: 1.00

USB設備信息,USB會被當做SCSI來處理。

mumk_register_tasklet: (1) tasklet 0x905bf9c0 status @0x9025e974

軟中斷信息輸出。Tasklet是在2.4中才出現,它是為了更好地利用多CPU。

?

Probing XX Flash Memory

探測 XX的閃存(Flash Memory),"NOR NAND Flash Memory Technology"

?

Amd/Fujitsu Extended Query Table v1.3 at 0x0040

number of CFI chips: 1

AMD與富士通合資設立的Flash供貨商Spansion。AMD因獲利不佳,已經退出Flash市場,后續由Spansion合資公司經營.主要生產NOR類型的flash,特點是容量小,速度快。Spansion商標的flash,在我們開發中會經常看到。以后大家看到Spansion的芯片,就能了解到它和AMD還有富士通的來龍去脈了。

Common flash Interface (CFI)是指一個統一的flash訪問接口,表示這種flash是這種接口類型的。

Using buffer write method

使用flash寫緩沖方式

flash提供了寫BUFFER的命令來加快對flash上塊的操作。對Flash擦除和寫數據是很慢的。如果用寫BUFFER的命令會快一點。據手冊上說,會快20倍。Buffer Size :5 bytes的buffer緩沖不是每個塊都有,是整個flash只有一個5 bytes的buffer,用寫BUFFER命令對所有的塊進行寫操作,都要用同一個buffer,寫Buffer是主要檢查buffer是否available,其實buffer起緩沖作用,來提高工作效率。

比如某flash有128個128K字節塊。允許用戶對任意塊進行字節編程和寫緩沖器字節編程操作,每字節編程時間為210μs;若采用寫緩沖器字節編程方式,32字節編程共需218μs,每字節編程時間僅為6.8μs。芯片的塊擦除時間為1s,允許在編程或塊擦除操作的同時進行懸掛中斷去進行讀操作,待讀操作完成后,寫入懸掛恢復命令,再繼續編程或塊擦除。

?

Creating 3 MTD partitions on "XX mapped flash":

0x00000000-0x00020000 : "BootLoader"

0x00020000-0x00040000 : "Config"

0x00040000-0x01000000 : "Romfs"

此處為重要信息部分,需要特別留意。

在內存中映射過的flash,創建三個MTD分區:

flash上的內容將被映射到內存中的對應地址

前128K為BootLoader--->0x00000000-0x00020000

接著的128K為系統配置信息Config存放的位置--->0x00020000-0x00040000

再后面的 16M - 2X128K 為romfs的存放處.--->0x00040000-0x01000000

上面的內容,大家可以根據前面的換算公式得到。

?

A> 編譯的bootloader一般大小約50K左右;

B> 在此處就知道了配置信息config是放在第2分區中的;

C> 制作的romfs的大小,一般為8M或10M左右,所以能放得下;

?

嵌入式Linux內核的塊設備驅動:

對于linux 的根文件系統,目前有三種塊設備的驅動可以選擇,它們分別是:

a) Blkmem 驅動

b) MTD 驅動

c) RAM disk 驅動

Blkmem 驅動是專門為嵌入式linux 開發的一種塊設備驅動,它是嵌入式linux系統中最為古老和通用的塊設備驅動。它原理相對簡單但是配置比較復雜,需要根據你即的Flash的分區使用情況來修改代碼。當然修改的結果是它可以對一些NOR型的Flash進行讀寫操作。不過目前支持的Flash類型不夠多。如果新加入對一種Flash的支持需要作的工作量比較大。

Linux的MTD驅動是標準Linux的Flash驅動。它支持大量的設備,有足夠的功能來定義Flash的分區,進行地址映射等等。使用MTD你可以在一個系統中使用不同類型的Flash。它可以將不同的Flash組合成一個線性的地址讓你來使用。

在標準的Linux 2.4內核中MTD有一系列的選項,你可以根據個人系統的需要來選擇,定制。

另外一種選擇就是RAM disk 驅動。在PC上它經常用于沒有硬盤的Linux的啟動過程。它和Flash沒有直接的關系。不過當Flash上啟動的是經過壓縮的內核時。RAM disk 可以作為根文件系統。

MTD 驅動提供了對Flash強大的支持,你通過它甚至可以在Flash上運行一個可以讀寫的真正的文件系統,比如JFFS2。而Blkmem驅動則望塵莫及。

NET4: Linux TCP/IP 1.0 for NET4.0

調用inet_init [ linux-2.4.22\net\ipv4\Af_inet.c ]時的輸出信息, 在啟動過程中被socket.c調用到。

IP Protocols: ICMP, UDP, TCP, IGMP

列出可以支持的IP協議,此處為kernel源代碼inet_add_protocol(p);的輸出。

在linux啟動過程中,都會看到這句的輸出。

IP: routing cache hash table of 512 buckets, 4Kbytes

IP路由代碼的輸出信息。

ip_rt_init [ linux-2.4.22\net\ipv4\Route.c ],Set the IP module up,路由緩沖hash表

TCP: Hash tables configured (established 8192 bind 8192)

TCP協議初始化輸出信息。tcp_init [ linux-2.4.22\net\ipv4\Tcp.c ],

NET4: Unix domain sockets 1.0/SMP for Linux NET4.0.

UNIX網絡協議信息。

af_unix_init[ linux-2.4.22\net\unix\Af_unix.c ], 多種連接的一種(IPv4, UNIX domain sockets, IPv6和IrDA). SMP 對稱多處理器—Symmetrical Multi Processing,這里主要是指UNIX的一些網絡協議.

?

上面的關于網絡的輸出信息是在linux啟動信息中都會出現的。

加載各種文件系統

cramfs: wrong magic

會出現“cramfs: wrong magic”,別擔心這沒有什么害處,這個是kernel的書寫bug,在2.6中有修改之,它是一個警告信息,用來檢查cramfs的superblock超級塊的。superblock也是VFS要用到的數據結構。

代碼linux-2.4.22\fs\cramfs\Inode.c:

2.4

cramfs_read_super(。。。)

/* Do sanity checks on the superblock */

?????? if (super.magic != CRAMFS_MAGIC) {

????????????? /* check at 512 byte offset */

????????????? memcpy(&super, cramfs_read(sb, 512, sizeof(super)), sizeof(super));

?????? ?????? if (super.magic != CRAMFS_MAGIC) {

???????????????????? printk(KERN_ERR "cramfs: wrong magic\n");

???????????????????? goto out;

????????????? }

?????? }

?

2.6

if (super.magic != CRAMFS_MAGIC) {

???????????????????????? if (!silent)

???????????????????????????????? printk(KERN_ERR "cramfs: wrong magic\n");

???????????????????????? goto out;

???????????????? }

超級塊是文件系統的“頭部”。它包含文件系統的狀態、尺寸和空閑磁盤塊等信息。如果損壞了一個文件系統的超級塊(例如不小心直接將數據寫到了文件系統的超級塊分區中),那么系統可能會完全不識別該文件系統,這樣也就不能安裝它了,即使采用e2fsck 命令也不能處理這個問題。

?

Cramfs文件系統:

cramfs 是 Linus Torvalds 本人開發的一個適用于嵌入式系統的小文件系統。由于它是只讀的,所以,雖然它采取了 zlib 做壓縮,但是它還是可以做到高效的隨機讀取。 cramfs 不會影響系統讀取文件的速度,又是一個高度壓縮的文件系統。

我們制作image文件之后,我們還要考慮怎樣才能在系統運行的時候,把這個 image 文件 mount 上來,成為一個可用的文件系統。由于這個 image 文件不是一個通常意義上的 block 設備,我們必須采用 loopback 設備來完成這一任務,如:

mount -o loop -t cramfs /usr.img /usr

這樣,就可以經由 loopback 設備,把 usr.img 這個 cramfs 的 image 文件 mount 到 /usr 目錄上去了。內核中需要對loopback這個設備的支持。

cramfs 的壓縮效率一般都能達到將近 50%。

Cramfs通過優化索引節點表的尺寸和除去傳統文件系統中文件之間的空間浪費來達到節約空間的目的。它還使用了zlib壓縮,實現優于2:1的壓縮比例。解壓縮過程的系統開銷并不是很大,因為Cramfs支持指定單塊的解壓,而并不必解壓縮整個文件。

Cramfs不僅能節省空間,還能避免非正常關機導致的等待fsck或手工進行fsck的麻煩。它通過只讀的方式達到這一目的。

RamDisk有三種實現方式:

在Linux中可以將一部分內存mount為分區來使用,通常稱之為RamDisk,分為:

Ramdisk, ramfs, tmpfs.

① 第一種就是傳統意義上的,可以格式化,然后加載。

這在Linux內核2.0/2.2就已經支持,其不足之處是大小固定,之后不能改變。

為了能夠使用Ramdisk,我們在編譯內核時須將block device中的Ramdisk支持選上,它下面還有兩個選項,一個是設定Ramdisk的大小,默認是4096k;另一個是initrd的支持。

如果對Ramdisk的支持已經編譯進內核,我們就可以使用它了:

首先查看一下可用的RamDisk,使用ls /dev/ram*

首先創建一個目錄,比如test,運行mkdir /mnt/test;

然后對/dev/ram0 創建文件系統,運行mke2fs /dev/ram0;

最后掛載 /dev/ram0,運行mount /dev/ram /mnt/test,就可以象對普通硬盤一樣對它進行操作了。

② 另兩種則是內核2.4才支持的,通過Ramfs或者Tmpfs來實現:

它們不需經過格式化,用起來靈活,其大小隨所需要的空間而增加或減少。

Ramfs顧名思義是內存文件系統,它處于虛擬文件系統(VFS)層,而不像ramdisk那樣基于虛擬在內存中的其他文件系統(ex2fs)。

因而,它無需格式化,可以創建多個,只要內存足夠,在創建時可以指定其最大能使用的內存大小。

如果你的Linux已經將Ramfs編譯進內核,你就可以很容易地使用Ramfs了。創建一個目錄,加載Ramfs到該目錄即可:

# mkdir /testRam

# mount -t ramfs none /testRAM

缺省情況下,Ramfs被限制最多可使用內存大小的一半。可以通過maxsize(以kbyte為單位)選項來改變。

# mount -t ramfs none /testRAM -o maxsize=2000 (創建了一個限定最大使用內存為2M的ramdisk)

③ Tmpfs是一個虛擬內存文件系統,它不同于傳統的用塊設備形式來實現的Ramdisk,也不同于針對物理內存的Ramfs。

Tmpfs可以使用物理內存,也可以使用交換分區。在Linux內核中,虛擬內存資源由物理內存(RAM)和交換分區組成,這些資源是由內核中的虛擬內存子系統來負責分配和管理。

Tmpfs向虛擬內存子系統請求頁來存儲文件,它同Linux的其它請求頁的部分一樣,不知道分配給自己的頁是在內存中還是在交換分區中。同Ramfs一樣,其大小也不是固定的,而是隨著所需要的空間而動態的增減。

使用tmpfs,首先你編譯內核時得選擇"虛擬內存文件系統支持(Virtual memory filesystem support)" 。

然后就可以加載tmpfs文件系統了:

# mkdir -p /mnt/tmpfs

# mount tmpfs /mnt/tmpfs -t tmpfs

同樣可以在加載時指定tmpfs文件系統大小的最大限制:

# mount tmpfs /mnt/tmpfs -t tmpfs -o size=32m

FAT: bogus logical sector size 21072

具體的文件系統FAT格式。

虛擬邏輯扇區大小為20K,linux-2.4.22\fs\fat\Inode.c。

在初始化MS-DOS文件系統時,讀MS-DOS文件系統的superblock,函數fat_read_super中輸出的上面的信息。

UMSDOS: msdos_read_super failed, mount aborted.

UMSDOS:一種文件系統,特點容量大但相對而言不大穩定。是Linux 使用的擴展了的DOS文件系統。它在 DOS 文件系統下增加了長文件名、 UID/GID、POSIX 權限和特殊文件 (設備、命名管道等)功能,而不犧牲對 DOS 的兼容性。允許一個普通的msdos文件系統用于Linux,而且無須為它建立單獨的分區,特別適合早期的硬盤空間不足的硬件條件。

VFS: Mounted root (romfs filesystem) readonly

虛擬文件系統VFS(Virtual Filesystem Switch)的輸出信息。

再次強調一下一個概念。VFS 是一種軟件機制,也可稱它為 Linux 的文件系統管理者,它是用來管理實際文件系統的掛載點,目的是為了能支持多種文件系統。kernel會先在內存中建立一顆 VFS 目錄樹,是內存中的一個數據對象,然后在其下掛載rootfs文件系統,還可以掛載其他類型的文件系統到某個子目錄上。

Mounted devfs on /dev

加載devfs設備管理文件系統到dev安裝點上。

/dev是我們經常會用到的一個目錄。

在2.4的kernel中才有使用到。每次啟動時內核會自動掛載devfs。

devfs提供了訪問內核設備的命名空間。它并不是建立或更改設備節點,devfs只是為你的特別文件系統進行維護。一般我們可以手工mknod創件設備節點。/dev目錄最初是空的,里面特定的文件是在系統啟動時、或是加載模組后驅動程序載入時建立的。當模組和驅動程序卸載時,文件就消失了。

Freeing init memory: 72K

釋放1號用戶進程init所占用的內存。

?

第三節:加載linux內核完畢,轉入cpu_idle進程

?

系統啟動過程中進程情況:

①init進程

一般來說, 系統在跑完 kernel bootstrapping 內核引導自舉后(被裝入內存、已經開始運行、已經初始化了所有的設備驅動程序和數據結構等等), 就去運行 init『萬process之父』, 有了它, 才能開始跑其他的進程,因此,init進程,它是內核啟動的第一個用戶級進程,它的進程號總是1。

你可以用進程查看命令來驗證

# ps aux

PID Uid VmSize Stat Command

1 0 SW init

2 0 SW [keventd]

3 0 SWN [ksoftirqd_CPU0]

4 0 SW [kswapd]

5 0 SW [bdflush]

6 0 SW [kupdated]

7 0 SW [rbwdg]

9 0 SW [mtdblockd]

10 0 SW [khubd]

80 0 SW [loop0]

另外 Linux 有兩個 kernel 類的 process 也開始跑了起來,一個是 kflushd/bdflush,另一個是 kswapd;

只有這個 init 是完全屬于 user 類的進程, 后兩者是 kernel假借 process 進程之名掛在進程上。

init有許多很重要的任務,比如象啟動getty(用于用戶登錄)、實現運行級別、以及處理孤立進程。

init 一開始就去讀 /etc/inittab (init初始化表),初始化表是按一定格式排列的關于進程運行時的有關信息的。init程序需要讀取/etc/inittab文件作為其行為指針。這個 inittab 中對于各個runlevel運行級別要跑哪些 rc 或 spawn 生出什么有很清楚的設定。

一般, 在Linux中初始化腳本在/etc/inittab 文件(或稱初始化表)中可以找到關于不同運行級別的描述。inittab是以行為單位的描述性(非執行性)文本,每一個指令行都是固定格式

inittab中有respawn項,但如果一個命令運行時失敗了,為了避免重運行的頻率太高,init將追蹤一個命令重運行了多少次,并且如果重運行的頻率太高,它將被延時五分鐘后再運行。
?

② kernel進程

A> 請注意init是1號進程,其他進程id分別是kflushd/ bdflush, kupdate, kpiod and kswapd。這里有一個要指出的:你會注意到虛擬占用(SIZE)和實際占用(RSS)列都是0,進程怎么會不使用內存呢?

這些進程就是內核守護進程。大部分內核并不顯示在進程列表里。守護進程在init之后啟動,所以他們和其他進程一樣有進程ID,但是他們的代碼和數據都存放在內核占有的內存中。在列表中使用中括號來區別與其他進程。

B> 輸入和輸出是通過內存中的緩沖來完成的,這讓事情變得更快,程序的寫入會存放在內存緩沖中,然后再一起寫入硬盤。守護進程kflushd和kupdate 管理這些工作。kupdate間斷的工作(每5秒)來檢查是否有寫過的緩沖,如過有,就讓kflushd把它們寫入磁盤。

C> 進程有時候無事可做,當它運行時也不一定需要把其所有的代碼和數據都放在內存中。這就意味著我們可以通過把運行中程序不用的內容切換到交換分區來更好的是利用內存。把這些進程數據移入/移出內存通過進程IO管理守護進程kpiod和交換守護進程kswapd,大約每隔1秒,kswapd醒來并檢查內存情況。如果在硬盤的東西要讀入內存,或者內存可用空間不足,kpiod就會被調用來做移入/移出操作。

D> bdflush - BUF_DIRTY, 將dirty緩存寫回到磁盤的核心守護進程。 對于有許多臟的緩沖區(包含必須同時寫到磁盤的數據的緩沖區)的系統提供了動態的響應。它在系統啟動的時候作為一個核心線程啟動,它叫自己為“kflushd”,而這是你用ps顯示系統中的進程的時候你會看得的名字。即定期(5秒)將臟(dirty)緩沖區的內容寫入磁盤,以騰出內存;

E> ksoftirqd_CPUx 是一個死循環, 負責處理軟中斷的。它是用來對軟中斷隊列進行緩沖處理的進程。當發生軟中斷時,系統并不急于處理,只是將相應的cpu的中斷狀態結構中的active 的相應的位,置位,并將相應的處理函數掛到相應的隊列,然后等待調度時機來臨,再來處理.

ksoftirqd_CPUx是由cpu_raise_softirq()即cpu觸發中斷,喚醒的內核線程,這涉及到軟中斷,ksoftirqd的代碼參見 [kernel/softirq.c]

F> keventd,它的任務就是執行 scheduler 調度器隊列中的任務,keventd 為它運行的任務提供了可預期的進程上下文。

G> khubd, 是用來檢測USB hub設備的,當usb有動態插拔時,將交由此內核進程來處理。在檢測到有hub事件時會有相應的動作(usb_hub_events())

H> mtdblockd是用來對flash塊設備進行寫操作的守護進程。

NAND類型的Flash需要MTD(Memory Technology Devices 內存技術驅動程序)驅動的支持才能被linux所使用。

NAND的特點是不能在芯片內執行(XIP,eXecute In Place),需要把代碼讀到系統RAM中再執行,傳輸效率不是最高,最大擦寫次數量為一百萬次,但寫入和擦除的速度很快,擦除單元小,是高數據存儲密度的最佳選擇。

NAND需要I/O接口,因此使用時需要驅動程序。

I> loop0 是負責處理loop塊設備的(回環設備)。loopback device指的就是拿文件來模擬塊設備, 在我們這里,loop設備主要用來處理需要mount到板上的文件系統,類似mount /tmp/rootfs /mnt -o loop。.我們的實例有:mount -o loop -t cramfs /xxx.bin /xxx 也就是將xxx.bin這個文件mount到板上來模擬cramfs壓縮ram文件系統。loop0進程負責對loop設備進行操作。

loopback設備和其他的塊設備的使用方法相同。特別的是,可以在該設備上建立一個文件系統,然后利用mount命令把該系統映射到某個目錄下以便訪問。這種整個建立在一個普通磁盤文件上的文件系統,就是虛擬文件系統 (virtual file system)。

?

總結:

上面的內容是本人為了在實際開發中更加清楚地了解嵌入式linux的啟動過程而做的一個總結性的文章。

在對嵌入式linux的啟動過程做了一個詳細注釋后,大家會對涉及到嵌入系統的各個概念有了一個更加明確的認識,并能對嵌入系統的軟硬件環境的有關設置更加清楚。當你自己動手結合linux源代碼來分析時,將會有一個清楚的全局觀。

轉載于:https://my.oschina.net/u/246948/blog/685684

總結

以上是生活随笔為你收集整理的内核启动全过程的全部內容,希望文章能夠幫你解決所遇到的問題。

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

五月婷婷激情综合 | 精品美女在线观看 | 国产高清视频在线播放 | 欧美专区亚洲专区 | 中文字幕a在线 | 日韩中文在线观看 | 欧美成人中文字幕 | 国产一区二区三区免费视频 | 欧美精品在线观看免费 | 天天操天天干天天干 | 在线观看亚洲成人 | 欧美日韩国产精品一区二区三区 | 久草在线免费播放 | 粉嫩高清一区二区三区 | 黄色免费网站下载 | 91精品国 | 一区二区免费不卡在线 | 久久国内精品视频 | 久草在线视频首页 | 午夜神马福利 | 日日夜夜91 | 日韩在线观看视频中文字幕 | 久久手机免费视频 | 中文字幕在线观看视频网站 | 97超碰站| 欧美日韩久 | 免费成人黄色 | 免费视频久久久久久久 | 不卡日韩av | 中文字幕在线观看不卡 | 亚洲精品视频一二三 | 国产视频一区在线免费观看 | 91成人在线视频观看 | 国产99中文字幕 | 久草在线视频在线观看 | 夜夜澡人模人人添人人看 | 色五丁香| 免费在线观看午夜视频 | 国产精品久久久久久久久久久久午夜片 | 中文字幕av全部资源www中文字幕在线观看 | 一区av在线播放 | 激情综合中文娱乐网 | 天天操天天添天天吹 | 人人干网站 | 99热精品久久| 91亚洲精品久久久蜜桃网站 | 色噜噜在线观看视频 | 国产又粗又猛又色又黄视频 | 亚洲成色777777在线观看影院 | 国产精品久久精品国产 | 日韩高清无线码2023 | 99免费在线视频 | 日韩视频一 | 97超碰超碰 | 最近中文字幕高清字幕在线视频 | 国产一级不卡毛片 | 国产精品一区专区欧美日韩 | 国产综合视频在线观看 | 欧美性生活小视频 | 久久久久免费看 | av资源在线看 | 国产精品久久久久久久久久久久久久 | 免费欧美 | 久久久国产99久久国产一 | 最新中文字幕在线资源 | 国产剧情一区二区 | 1000部18岁以下禁看视频 | 九九九九热精品免费视频点播观看 | 麻豆视频在线观看 | 在线 欧美 日韩 | 成人免费视频网站在线观看 | 久久这里有精品 | 国产欧美高清 | 高清精品久久 | 特级a毛片 | 天天玩天天操天天射 | 亚洲精品资源在线观看 | 日韩激情第一页 | 亚洲成人资源网 | 玖玖在线免费视频 | 超碰国产在线观看 | 久久亚洲精品电影 | 日韩免费福利 | 久久综合精品一区 | 福利久久久 | 涩涩爱夜夜爱 | 国内精品久久久久久久久 | 成人作爱视频 | 色视频在线观看 | av国产在线观看 | 亚洲 欧美 变态 国产 另类 | 在线亚洲播放 | 欧美日韩3p | 国内小视频 | 国产视频一区二区三区在线 | 福利久久久 | 精品国产a| 欧美二区在线播放 | 欧日韩在线视频 | 天堂成人在线 | 精品国产伦一区二区三区 | 成年人视频在线免费播放 | 国产亚洲精品女人久久久久久 | 成年人免费电影 | 九七在线视频 | 久草在线综合 | www久久99 | 欧美一级专区免费大片 | 久久久影院一区二区三区 | 中文字幕在线一区观看 | 国产在线播放一区二区三区 | 日韩视频免费观看高清 | 久久美女精品 | 中文字幕在线观看1 | 久久超级碰 | www.色婷婷 | 在线观看中文字幕网站 | 久草在线视频精品 | 久久久免费播放 | 成年人电影免费看 | 亚洲国产三级 | 人人干天天射 | 中文字幕影片免费在线观看 | 国产小视频你懂的在线 | 中文字幕在线播放一区二区 | 婷婷五月色综合 | 欧美 日韩 视频 | 中文字幕第一 | 在线观看视频97 | 亚洲综合小说电影qvod | 日韩欧美国产成人 | wwwwwww黄| 国产精品一区二区吃奶在线观看 | 337p日本大胆噜噜噜噜 | 精品国产成人 | 日韩欧美电影在线观看 | 奇米影视777影音先锋 | 特级毛片网| 永久免费视频国产 | 中文字幕在线一二 | 操天天操 | 欧美精品一区二区性色 | 欧美成人在线免费 | 夜夜操天天操 | 欧美日韩一级在线 | 久久大片网站 | 成人在线视频一区 | 国产免费午夜 | 激情五月五月婷婷 | 丁香六月综合网 | 久草在线手机观看 | 岛国大片免费视频 | 韩国精品一区二区三区六区色诱 | 欧美日本国产在线观看 | 91亚洲激情 | 伊人影院99 | 亚洲专区一二三 | 久久人人做| 久久午夜免费视频 | 久国产在线播放 | 久久综合久久久久88 | 香蕉视频在线看 | 99精品视频在线观看 | 久久精品一级片 | 丁香视频五月 | 亚洲视频在线视频 | 91热爆视频 | 97品白浆高清久久久久久 | 91热这里只有精品 | 精品国产视频在线 | 探花视频免费在线观看 | 日韩久久午夜一级啪啪 | 91社区国产高清 | 九九av| 在线精品一区二区 | 日韩精品视频免费在线观看 | 狠狠色噜噜狠狠狠狠 | 国产精品久久久久免费 | 成人免费xxx在线观看 | 日韩大片在线看 | 久久久久国产一区二区三区 | 韩国av免费 | 91chinesexxx | 人人爽网站| 国产传媒一区在线 | av蜜桃在线 | 中文字幕888 | 99c视频高清免费观看 | 91亚色视频在线观看 | 97超碰精品 | 热久久精品在线 | 黄av资源| 天天干,天天插 | 国产小视频在线 | 韩国精品一区二区三区六区色诱 | 国内精品久久久久久中文字幕 | 99精品色| 99精品国产一区二区三区麻豆 | 黄色成年网站 | 毛片网站在线看 | 91精品推荐| 人人看人人草 | 国产理伦在线 | 国产男女无遮挡猛进猛出在线观看 | 成人av免费电影 | 婷婷av网站| 99成人在线视频 | 成人av电影网址 | 亚州国产视频 | 精品国产资源 | 成年人黄色在线观看 | 日韩激情中文字幕 | 国内偷拍精品视频 | 国产高清99 | 免费黄色网址大全 | 在线观看视频中文字幕 | 五月天久久婷 | 热久久这里只有精品 | 免费视频一区二区 | 日本在线成人 | 久草网在线视频 | 精品视频专区 | 日韩精品在线观看av | 成人黄在线 | www.97视频| 91福利小视频 | 国产精品久久久久久久久免费 | 超碰人人草人人 | 91黄色视屏| 久碰视频在线观看 | 久久69精品 | 欧洲一区二区在线观看 | 久久精品系列 | 欧美久久久久久久久久久 | 国内精品毛片 | 婷婷网站天天婷婷网站 | 免费看一级特黄a大片 | 久久久久久高潮国产精品视 | 日韩精品亚洲专区在线观看 | 婷婷综合五月天 | 免费看一级黄色大全 | 在线а√天堂中文官网 | 97超碰资源总站 | 黄色小说网站在线 | 国产成人av电影 | 91最新国产 | 久久精品成人欧美大片古装 | 91亚洲精品久久久中文字幕 | 免费三级大片 | 色人久久| 日韩二级毛片 | 天天插伊人 | 欧美在线视频日韩 | 中文字幕国语官网在线视频 | 在线精品在线 | 国产91电影在线观看 | 日韩在线视频在线观看 | 欧美日韩国产在线一区 | 国产在线视频在线观看 | 麻豆影视在线播放 | 中文字幕一区在线观看视频 | 亚洲专区 国产精品 | 亚洲欧洲视频 | 久久69精品久久久久久久电影好 | 亚洲精品久久久蜜臀下载官网 | 亚洲精品视频www | 亚洲精品国产品国语在线 | 亚洲成人精品国产 | 欧美视频99 | 中中文字幕av在线 | 六月色婷 | 国产做a爱一级久久 | 国产一区二区不卡视频 | 国产视频欧美视频 | 日韩av免费网站 | 在线观看黄污 | 色国产在线 | av中文字幕在线看 | 久久99精品久久久久久清纯直播 | 三日本三级少妇三级99 | 丁香婷婷网| 不卡av免费在线观看 | 国产成人av网址 | 欧美激情精品一区 | 99热这里只有精品8 久久综合毛片 | 99精品视频在线观看视频 | 日本成人免费在线观看 | 成人9ⅰ免费影视网站 | 色综合色综合久久综合频道88 | 91精品久久久久久久久久入口 | 亚洲综合少妇 | 中文在线免费观看 | 久久不见久久见免费影院 | 国产人成一区二区三区影院 | 成人h在线| 天天天天天天干 | 久久精品欧美日韩精品 | 操操日 | 亚洲在线网址 | 激情欧美一区二区三区免费看 | 黄色毛片视频 | 91在线资源 | 最新三级在线 | 在线观看国产高清视频 | 九九免费在线看完整版 | 欧美精品v国产精品v日韩精品 | 久久激情五月激情 | av观看在线观看 | 久久久在线 | 日韩xxx视频| www.操.com| 国产美女精彩久久 | 亚洲国产精品500在线观看 | 日韩在线电影一区二区 | 天天做日日爱夜夜爽 | 日韩中文字幕免费视频 | 国产精品18p| 国产视频久久 | 色综合天天综合在线视频 | 91成版人在线观看入口 | 中文字幕在线视频国产 | 日韩免费一级电影 | 国产r级在线观看 | av电影久久 | 国产.精品.日韩.另类.中文.在线.播放 | 国产精品久久久久久麻豆一区 | 特黄一级毛片 | 美女视频黄色免费 | 五月天激情综合 | 亚洲精品成人av在线 | 天天做天天爱夜夜爽 | 日女人免费视频 | 又黄又爽的视频在线观看网站 | 人人澡人摸人人添学生av | 国产色区 | 亚洲男男gaygay无套同网址 | 亚洲天堂网在线观看视频 | 日韩中文字幕网站 | 国产日产精品一区二区三区四区的观看方式 | 精品91| 日韩欧美久久 | 日韩视频免费看 | 国产精品毛片一区二区在线看 | 999视频在线播放 | 激情五月婷婷丁香 | 91在线免费播放视频 | 91高清在线 | 在线天堂v| 国产淫片| 韩国精品福利一区二区三区 | www.xxx.性狂虐 | 午夜999| 色婷婷综合久久久中文字幕 | 九九导航 | 一区二区三区影院 | 狠狠色丁香婷婷综合最新地址 | 国产小视频免费在线观看 | 国产在线p | 中文在线字幕免费观看 | 丁香综合激情 | 免费精品视频在线观看 | 国产69精品久久久久9999apgf | 99爱在线观看 | 日韩免费一二三区 | 精品国产伦一区二区三区观看体验 | 97在线超碰 | 色偷偷中文字幕 | 日韩在线第一 | 成年人电影毛片 | 久久国产欧美日韩精品 | 麻豆视频在线免费看 | 国产精品不卡视频 | 99久久久成人国产精品 | 亚洲成人av在线电影 | 成人资源网| 黄色毛片视频 | 看黄色91 | 丁香六月五月婷婷 | 不卡精品视频 | 成人97人人超碰人人99 | 欧美性色黄 | 成人av一区二区兰花在线播放 | 久久久国产一区二区 | 成人在线免费av | 国产亚洲视频在线免费观看 | 中文字幕高清在线播放 | 久久精品免费播放 | 欧美激情视频在线观看免费 | 亚洲综合色视频在线观看 | 日韩高清免费无专码区 | 色婷婷狠狠五月综合天色拍 | 菠萝菠萝在线精品视频 | 综合在线观看色 | 精品久久久久久国产偷窥 | 国产福利91精品 | 欧美精品久久久久久久亚洲调教 | 国产精品亚州 | 深爱激情五月婷婷 | 精品国产伦一区二区三区观看方式 | 免费看的av片 | 日韩 在线 | 亚洲国产日本 | 99免费在线 | 一区精品在线 | 激情av网址| 亚洲97在线 | 日本黄色免费电影网站 | 手机在线永久免费观看av片 | 国产一级在线观看视频 | 国内精品久久久久久 | 国产精品美女久久久久久久久久久 | 国产精品999久久久 久产久精国产品 | 一级a性色生活片久久毛片波多野 | 日本在线中文 | 91久久国产自产拍夜夜嗨 | 美女免费电影 | 久福利 | 免费观看一区二区 | 久久超碰免费 | 人人搞人人干 | 99热播精品 | 99欧美精品 | 美女网站黄免费 | 亚洲激精日韩激精欧美精品 | 免费黄色一区 | 国产亚洲成av人片在线观看桃 | 国产高清精 | 国产成人三级在线播放 | 亚洲欧美视频在线 | 黄色网www | 中文在线天堂资源 | 国产自在线观看 | 91成年人视频 | 狠狠激情中文字幕 | 免费日韩高清 | 精品在线一区二区三区 | 夜夜高潮夜夜爽国产伦精品 | 精品亚洲网 | 在线天堂8√ | 五月婷婷操 | 日韩草比 | 黄污在线看 | 欧美一级久久 | 国产精品视频你懂的 | 999久久久久久久久 69av视频在线观看 | 香蕉精品视频在线观看 | 国产私拍在线 | 91私密视频 | 韩日三级av| 精品亚洲国产视频 | 免费福利片 | 九月婷婷人人澡人人添人人爽 | 中文字幕文字幕一区二区 | 婷婷综合成人 | 激情五月婷婷丁香 | 亚洲.www| 激情网站网址 | 黄色片免费电影 | 亚洲区另类春色综合小说校园片 | 天天射成人 | 欧美综合色 | 在线成人av | 啪啪av在线 | 国产不卡高清 | 亚州精品天堂中文字幕 | 69亚洲乱| 日韩av视屏在线观看 | 久久国产精品99久久人人澡 | 久久手机免费视频 | 久久热首页| 久久精品激情 | 深爱五月激情五月 | 色婷婷欧美 | 成人免费视频播放 | 国产免费久久久久 | 中文字幕成人网 | 国产精品久久久久久影院 | 久久久久免费精品国产小说色大师 | av国产在线观看 | 福利视频精品 | 国产精品成久久久久三级 | 丁香国产视频 | av黄在线播放 | 精品国产aⅴ麻豆 | 人人干人人超 | 17videosex性欧美| 成人在线视频你懂的 | 人人草天天草 | 一区二区三区福利 | 亚色视频在线观看 | 久久久99国产精品免费 | 69精品久久 | 五月婷婷在线视频观看 | 国产小视频福利在线 | 777视频在线观看 | 91精品国产91久久久久久三级 | 亚洲精品一区二区三区在线观看 | 婷婷丁香六月 | 在线三级播放 | 国产日韩精品在线观看 | 最近中文字幕视频网 | 91免费看片黄 | 欧美日韩中文视频 | 国产成人亚洲精品自产在线 | 成人小视频在线播放 | 午夜黄网 | 色综合天天狠狠 | 伊人天天色 | 中文在线免费一区三区 | 亚洲成a人片综合在线 | 狠狠操精品 | 日韩精品一区二区在线观看 | 国产91精品高清一区二区三区 | 成人av电影网址 | 色偷偷88888欧美精品久久久 | 日韩欧美综合 | 久久呀 | www国产精品com | 狠狠色伊人亚洲综合网站野外 | 999视频在线播放 | 午夜黄色 | 亚洲精品视 | 成人9ⅰ免费影视网站 | 亚洲最新av在线网站 | 国产自产高清不卡 | 婷婷激情小说网 | 日韩av一区二区三区 | 在线观看视频你懂 | 99精品国产一区二区三区不卡 | 美女久久视频 | 免费精品在线 | 97精品久久 | 欧美日韩国产一区二区在线观看 | 成人黄色片免费看 | 麻花天美星空视频 | 麻豆免费观看视频 | 国产蜜臀av | 国产精品爽爽久久久久久蜜臀 | 日韩网站免费观看 | 天天色天天射天天综合网 | 国产精品美女999 | 最新日韩精品 | 欧美一级大片在线观看 | 黄色亚洲在线 | 91大神免费在线观看 | 欧美性网站 | 免费在线观看污 | 久久人人爽人人爽人人片av软件 | 免费国产视频 | 最新日韩视频在线观看 | 国产精品综合在线观看 | 狠狠色丁香婷婷综合 | 91视频在线观看下载 | 日韩在线三级 | 久久天堂亚洲 | 在线观看爱爱视频 | 97香蕉超级碰碰久久免费软件 | 草久在线观看 | 成人三级网址 | 国产一区视频导航 | 久久精品91久久久久久再现 | 国产精品网址在线观看 | 亚洲国产欧洲综合997久久, | 福利视频午夜 | 国产亚洲精品成人av久久影院 | 中文字幕乱视频 | 狠狠操电影网 | 麻豆国产精品va在线观看不卡 | 亚洲欧美一区二区三区孕妇写真 | 日韩大陆欧美高清视频区 | 96久久精品| 久久久久久伊人 | 美女视频黄色免费 | 天天综合久久 | 色干综合 | 五月开心婷婷网 | 日本一区二区不卡高清 | 久久不射电影网 | 黄色av播放| 亚洲精品大片www | 免费亚洲黄色 | 五月开心婷婷网 | 久久国产精品成人免费浪潮 | av福利免费 | 最近中文字幕大全中文字幕免费 | 九九亚洲视频 | 日本99久久 | 正在播放久久 | 最近中文字幕高清字幕免费mv | 国产黄色片久久久 | 亚洲欧美少妇 | 一区二区三区国产精品 | 一区二区精品久久 | 在线精品在线 | 久久久免费视频播放 | 亚洲春色成人 | 久久一级片 | 日韩激情小视频 | 欧美激情精品久久久久久免费印度 | 日本久草电影 | 国产原厂视频在线观看 | 日韩欧在线 | 在线亚洲高清视频 | 91av免费观看 | 久久久免费少妇 | 欧美激情精品久久久久久免费印度 | 日日夜夜天天射 | 日韩精品最新在线观看 | 久久噜噜少妇网站 | 在线观看视频你懂得 | 亚州av网站大全 | 久久只有精品 | 国产精品中文字幕在线 | 久久久久久久久久影视 | 2021国产精品视频 | 国产v在线观看 | 999久久国精品免费观看网站 | 日韩视频www | 91精品专区| 成人黄色电影在线观看 | 久久精品理论 | 久草视频播放 | 国产精品女同一区二区三区久久夜 | 视频国产 | 伊人超碰在线 | 亚洲精品乱码久久久久久蜜桃91 | 日韩一二三 | 91免费看黄 | 黄色免费观看视频 | 欧美精品乱码久久久久久 | 国内久久久久 | 欧美性极品xxxx做受 | 麻豆传媒一区二区 | 狠狠干夜夜爽 | 四虎永久免费网站 | 国产精品成人免费一区久久羞羞 | 91热爆视频 | 日韩在线资源 | 深夜免费福利视频 | 五月天激情在线 | 亚洲一区二区三区精品在线观看 | 国产欧美在线一区二区三区 | 日日夜夜草 | 久久国产精品网站 | 日韩av影视在线观看 | 激情网站 | 911国产| 日韩中文在线电影 | 精品一区精品二区 | 91精品无人成人www | 日本激情动作片免费看 | 不卡的av | 成人网在线免费视频 | 日韩性xxx| 国产精品6 | 蜜臀aⅴ精品一区二区三区 久久视屏网 | 9999在线观看 | 欧美精品一区二区蜜臀亚洲 | 中文字幕网站视频在线 | 色婷婷国产 | 国产成在线观看免费视频 | 黄网站免费久久 | 亚洲自拍自偷 | 五月激情av | 成人毛片在线观看 | 99色免费视频| 91av在线国产| 欧美精品久久久久久久久老牛影院 | 国产又粗又长的视频 | 中文字幕久久精品一区 | av免费观看网站 | 草久在线观看 | 色全色在线资源网 | 国产一级淫片免费看 | 免费看色视频 | 久青草影院 | 婷婷丁香色综合狠狠色 | 特级毛片在线观看 | 成人欧美日韩国产 | 好看的国产精品视频 | 一级成人网| 欧美性极品xxxx娇小 | 国产色网站 | 日本精品视频免费 | 亚洲精品日韩在线观看 | 国产在线a不卡 | 亚洲欧洲av在线 | 中文字幕一区二区三区四区久久 | 五月婷婷视频在线 | 激情综合久久 | 草久在线播放 | 中文字幕成人在线 | 国产成人一区在线 | 99久免费精品视频在线观看 | 国产啊v在线 | av 一区二区三区 | 伊人亚洲精品 | 国产一二三在线视频 | 日本中文字幕在线电影 | 91在线最新| 亚洲a免费| 日韩超碰| 99色99| 99在线热播 | 久久精品国产一区二区电影 | 五月婷婷毛片 | 五月婷影院 | 日韩电影一区二区三区 | 国产精品久久久久久久久久免费看 | 国产免费一区二区三区最新 | 亚洲日本国产精品 | 国产精品国产自产拍高清av | 在线播放亚洲激情 | 97视频免费观看 | 视频国产一区二区三区 | 91视频成人免费 | 国产一区成人 | 中文字幕 国产 一区 | 国产在线色站 | 五月天国产精品 | 成人一区二区三区中文字幕 | 国产精品视频内 | 色激情在线 | 欧美色婷| 粉嫩aⅴ一区二区三区 | 9色在线视频| 日韩国产欧美在线视频 | 亚洲日本中文字幕在线观看 | 日本高清xxxx| 国产精品一区二区免费 | 精品国产色 | 亚洲国产中文字幕 | av爱干 | 四虎影视成人 | 日韩激情av在线 | av高清不卡| 青青河边草免费观看完整版高清 | 婷婷干五月 | 亚洲精品国产第一综合99久久 | 国产第一二区 | 国产高清绿奴videos | 精品一区精品二区高清 | 色网站在线 | 免费视频 你懂的 | 狠狠色丁香婷婷综合 | 国产精品影音先锋 | 首页av在线 | 久久国产网 | 欧洲视频一区 | 亚洲国产99 | 91精品啪在线观看国产 | 国产精品久久久久久超碰 | 在线免费视频 你懂得 | 91成人网在线观看 | 天天操操操操操操 | 91天天视频| 国产一级特黄毛片在线毛片 | av中文字幕在线播放 | 国产免费成人 | 国产伦理精品一区二区 | 91香蕉视频色版 | 精品福利网 | 日韩精品一区二区三区电影 | 久久婷婷开心 | 国产一级一片免费播放放a 一区二区三区国产欧美 | 亚洲永久精品在线 | 97在线观视频免费观看 | www.69xx | 在线视频一区二区 | 亚洲成av人片在线观看无 | 久草a在线| 亚洲高清视频在线观看免费 | 久久久夜色 | 九九精品视频在线观看 | 久久这里只有精品9 | 日韩三级视频 | 国产你懂的在线 | 91成人精品在线 | 黄色在线网站噜噜噜 | 丁香五月亚洲综合在线 | 欧美特一级片 | 日本h在线播放 | 99精品国产成人一区二区 | 久久久久久久久久久久av | 精品久久久久久久久中文字幕 | 亚洲精品中文字幕在线观看 | 麻豆小视频在线观看 | 91爱爱网址| 国产盗摄精品一区二区 | 最近中文字幕完整视频高清1 | 中文字幕av最新更新 | 精品国产一区二区三区噜噜噜 | 国产成人一区二区三区影院在线 | 黄色av电影一级片 | 日韩毛片一区 | 亚洲久草视频 | 亚洲日本va在线观看 | 久草影视在线观看 | 日韩精品首页 | 成年人看片网站 | 五月婷婷伊人网 | 波多野结衣在线观看视频 | 亚洲视频1区2区 | 国产一区福利在线 | 国产一级二级三级在线观看 | 免费观看一区二区三区视频 | 男女啪啪网站 | 在线看中文字幕 | 五月天丁香综合 | 99久久精品国产毛片 | 色激情在线| 国产精品久久久久久一区二区 | 久久综合福利 | 国产精品久久久影视 | 亚洲精品国偷拍自产在线观看蜜桃 | av 一区 二区 久久 | 国产精品高清在线观看 | 国产色综合 | 一区二区在线影院 | 亚洲在线网址 | 91在线观看高清 | av福利网址导航大全 | 亚洲欧美日韩精品久久奇米一区 | 毛片激情永久免费 | 婷婷网站天天婷婷网站 | 中文字幕在线日本 | 国产精品久久久久久欧美 | 精品99免费视频 | 成人免费网站在线观看 | 日韩在线小视频 | 三级av在线免费观看 | www.91成人| 久久国产麻豆 | 国产成人精品久久久 | 久久久久国产一区二区三区 | 国产精品麻豆果冻传媒在线播放 | 麻豆成人在线观看 | 精品久久久久久久久久久久 | 欧美xxxx性xxxxx高清 | 国产综合在线观看视频 | 奇米网网址 | 久久久久久久久久久精 | 欧美国产日韩一区二区 | 色综合天天综合在线视频 | 黄色三几片 | 97理论电影 | 欧美性视频网站 | 99久久成人| 成人超碰在线 | 五月天综合婷婷 | 久久久综合九色合综国产精品 | 日韩成人免费电影 | 精品国产一区二区三区久久久 | 天天色综合三 | 在线看国产一区 | 在线观看香蕉视频 | 久久精品这里热有精品 | 91av在线视频播放 | 91色一区二区三区 | 亚av在线 | 国产五月色婷婷六月丁香视频 | 免费看日韩片 | 中文在线中文资源 | 日本在线观看中文字幕无线观看 | 中文字幕精品视频 | 99麻豆视频 | 国产高清在线 | 欧美性做爰猛烈叫床潮 | 天天天天干 | 超碰在线天天 | 天天操天天操天天爽 | 一区二区欧美在线观看 | 丰满少妇在线观看 | 久久精品牌麻豆国产大山 | 超碰国产97 | 六月丁香色婷婷 | 综合国产在线 | 成人在线视频论坛 | 黄色a在线观看 | 免费观看成人网 | 97伊人网| 在线韩国电影免费观影完整版 | 国产成人久久av977小说 | 久久综合9988久久爱 | 国产二区视频在线观看 | 日本精品一区二区在线观看 | 久久高清av | 久久香蕉电影网 | 成人免费视频视频在线观看 免费 | 欧美人zozo | 日日夜夜中文字幕 | 色一级片 | 香蕉视频网址 | 久久精品爱视频 | 色香网 | 在线影院中文字幕 | 男女激情麻豆 | 西西444www大胆无视频 | 国产精品18久久久久久首页狼 | 在线观看一级视频 | 国产不卡免费av | 一区二区三区四区影院 | 91成人在线看| 国产精品亚州 | 成人综合免费 | 成人黄色av网站 | 美女福利视频 | 中文视频在线看 | 色婷婷视频 | 中文字幕免费高 | 操操综合网 | 四虎成人精品在永久免费 | 久久成人在线 | 久久精品国产成人 | 成人免费xxx在线观看 | 91插插插网站 | 在线色吧| 黄色毛片在线观看 | 欧美日韩不卡一区二区三区 | 日韩精品久久一区二区 | 日韩理论片在线 | 日韩丝袜视频 | 国产高清日韩欧美 | 99免费精品| 久久精久久精 | 最新国产在线 | 亚洲,播放 | a天堂一码二码专区 | 超碰免费在线公开 | 欧美 日韩精品 | 97精品国产91久久久久久 | 日本高清免费中文字幕 | 二区三区在线 | 正在播放久久 | 午夜精品一区二区三区免费视频 | 91精品国自产在线偷拍蜜桃 | 亚洲精品国产成人 | 欧美性生活一级片 | 亚洲成a人片在线观看网站口工 | 婷婷综合国产 | 免费国产ww| 免费福利小视频 | 国产91在线 | 美洲 | v片在线播放 | 99久久99| 免费亚洲黄色 | 99综合电影在线视频 | 中文国产字幕 | 国产成人精品久久久 | 成人高清av在线 | 91爱爱电影 | 在线观看中文av | 久久综合狠狠 | 国产日韩精品欧美 | 欧美成年网站 | 日韩毛片精品 | 黄色h在线观看 | 天天操天天曰 | 国产视频日韩视频欧美视频 | 99久久精品费精品 | 黄色亚洲在线 | 五月宗合网 | 99久久婷婷国产综合精品 | 国产亚洲精品女人久久久久久 | 日韩视频一二三区 | 久久精品日本啪啪涩涩 | 国产精品18久久久久久久 | 五月开心六月婷婷 | 久久免费高清 | 蜜臀av性久久久久蜜臀aⅴ流畅 | 九九热久久久 | 欧美精品一区二区在线播放 | 色婷婷啪啪免费在线电影观看 | 国产四虎影院 | 香蕉视频国产在线 | 91久久久久久久 | 一区二区精品在线视频 | 天天干天天操天天操 | 操操操影院| 四虎精品成人免费网站 | 免费黄色网址大全 | av色一区 | 精品福利在线观看 | 国产一卡二卡在线 | 97超碰人人干 | 麻豆视频观看 | 99r国产精品 | 韩国av一区二区三区 | 免费观看国产成人 | 久久爱992xxoo| 久热色超碰 | 亚洲免费公开视频 | 亚洲专区欧美专区 | 亚洲成人黄色av | 久久艹影院 | 色a网| 国产永久网站 | 精品在线观看免费 |