導航:首頁 > 物理學科 > linux內核如何操作物理地址

linux內核如何操作物理地址

發布時間:2022-03-16 01:05:35

㈠ linux 用戶空間怎樣直接訪問物理地址

虛擬虛擬實際真物理址認兩址間沒關系虛擬通系統硬體雙重工作做種點點映射(實際內存配按照頁處理)軟體需要考慮內存數據物理址需要用虛擬址做數據存儲處理行linux虛擬址物理址映射

㈡ linux如何看物理地址

1、這里以ubuntu為例,抄演示查看物理網卡地址的方法,首先按下Alt+F12打開終端輸入框:
2、然後輸入命令「ifconfig -a」,這里該命令類似於windows下的ipconfig命令:
3、按下回車後就會出現網卡的詳細信息了,這里的高亮部分即是ip信息,網卡物理地址在最後第二行顯示:

㈢ linux內核可以直接操作用戶空間數據嗎

我們知道現在操作系統都是採用虛擬存儲器,那麼對32位操作系統而言,它的定址空間(虛擬存儲空間)為4G(2的32次方)。操心系統的核心是內核,獨立於普通的應用程序,可以訪問受保護的內存空間,也有訪問底層硬體設備的所有許可權。為了保證用戶進程不能直接操作內核,保證內核的安全,操心系統將虛擬空間劃分為兩部分,一部分為內核空間,一部分為用戶空間。針對linux操作系統而言,將最高的1G位元組(從虛擬地址0xC0000000到0xFFFFFFFF),供內核使用,稱為內核空間,而將較低的3G位元組(從虛擬地址0x00000000到0xBFFFFFFF),供各個進程使用,稱為用戶空間。每個進程可以通過系統調用進入內核,因此,Linux內核由系統內的所有進程共享。於是,從具體進程的角度來看,每個進程可以擁有4G位元組的虛擬空間

㈣ linux內核操作的主要命令及作用

cp命令
該命令的功能是將給出的文件或目錄拷貝到另一文件或目錄中,同MSDOS下的命令一樣,功能十分強大

語法: cp [選項] 源文件或目錄 目標文件或目錄

說明:該命令把指定的源文件復制到目標文件或把多個源文件復制到目標目錄中

-r 若給出的源文件是一目錄文件,此時cp將遞歸復制該目錄下所有的子目錄和文件

mv命令
用戶可以使用mv命令來為文件或目錄改名或將文件由一個目錄移入另一個目錄中。該命令如同MSDOS下的ren和move的組合

語法:mv [選項] 源文件或目錄 目標文件或目錄

rm命令
該命令的功能為刪除一個目錄中的一個或多個文件或目錄,它也可以將某個目錄及其下的所有文件及子目錄均刪除

rm命令的一般形式為:

rm [選項] 文件…

如果沒有使用-r選項,則rm不會刪除目錄

該命令的各選項含義如下:

-f 忽略不存在的文件,從不給出提示

-r 指示rm將參數中列出的全部目錄和子目錄均遞歸地刪除

Vi命令
插入模式
按「i」切換進入插入模式「insert mode」,按「i」進入插入模式後是從游標當前位置開始輸入文件
按「a」進入插入模式後,是從目前游標所在位置的下一個位置開始輸入文字
按「o」進入插入模式後,是插入新的一行,從行首開始輸入文字
從插入模式切換為命令行模式
按「ESC」鍵
查找字元
「/關鍵字」:先按「/」鍵,再輸入您想尋找的字元,如果第一次找的關鍵字不是您想要的,可以一直按「n」會往後尋找到您要的關鍵字為止
「?關鍵字」:先按「?」鍵,再輸入您想尋找的字元,如果第一次找的關鍵字不是您想要的,可以一直按「n」會往前尋找到您要的關鍵字為止
離開vi
「q」:按「q」就是退出,如果無法離開vi,可以在「q」後跟一個「!」強制離開vi
「qw」:一般建議離開時,搭配「w」一起使用,這樣在退出的時候還可以保存文件

mkdir命令
功能:創建一個目錄(類似MSDOS下的md命令)

語法:mkdir [選項] dir-name

說明:該命令創建由dir-name命名的目錄。要求創建目錄的用戶在當前目錄中(dir-name的父目錄中)具有寫許可權,並且dirname不能是當前目錄中已有的目錄或 文件名稱。

命令中各選項的含義為:

-p 可以是一個路徑名稱。此時若路徑中的某些目錄尚不存在, 加上此選項後, 系統將自動建立好那些尚不存在的目錄,即一次可以建立多個目錄

cd 命令
功能:改變工作目錄

語法:cd [directory]

說明:該命令將當前目錄改變至directory所指定的目錄。若沒有指定directory, 則回到用戶的主目錄。為了改變到指定目錄,用戶必須擁有對指定目錄的執行和讀許可權

ls 命令
功能: 列出目錄的內容,該命令類似於DOS下的dir命令

語法:ls [選項] [目錄或是文件]

對於每個目錄,該命令將列出其中的所有子目錄與文件。對於每個文件,ls將輸出 其文件名以及所要求的其他信息。默認情況下,輸出條目按字母順序排序。當未給出目錄名或是文件名時,就顯示當前目錄的信息。

命令中各選項的含義如下:
-a 顯示指定目錄下所有子目錄與文件,包括隱藏文件
-c 按文件的修改時間排序
-t 顯示時按修改時間(最近優先)而不是按名字排序。若文件修改時間相同,則 按字典順序。修改時間取決於是否使用了c或u選頂。預設的時間標記是最後一次修改時間

tar命令
tar可以為文件和目錄創建檔案。利用tar,用戶可以為某一特定文件創建檔案(備份文件),也可以在檔案中改變文件,或者向檔案中加入新的文件。tar最初被用來在磁帶上創建檔案,現在,用戶可以在任何設備上創建檔案,如軟盤。利用tar命令,可以把一大堆的文件和目錄全部打包成一個文件,這對於備份文件或將幾個文件組合成為一個文件以便於網路傳輸是非常有用的。Linux上的tar是GNU版本的。

語法:tar [主選項+輔選項] 文件或者目錄

使用該命令時,主選項是必須要有的,它告訴tar要做什麼事情,輔選項是輔助使用的,可以選用。

主選項:

-c 創建新的檔案文件。如果用戶想備份一個目錄或是一些文件,就要選擇這個選項。

-x 從檔案文件中釋放文件。

-f 使用檔案文件或設備,這個選項通常是必選的。

-v 詳細報告tar處理的文件信息。如無此選項,tar不報告文件信息。

-z 用gzip來壓縮/解壓縮文件,加上該選項後可以將檔案文件進行壓縮,但還原時也一定要使用該選項進行解壓縮

文件或目錄的訪問許可權
Linux系統中的每個文件和目錄都有訪問許可許可權,用它來確定誰可以通過何種方式對文件和目錄進行訪問和操作
文件或目錄的訪問許可權分為只讀,只寫和可執行三種。以文件為例,只讀許可權表示只允許讀其內容,而禁止對其做任何的更改操作。可執行許可權表示允許將該文件作為一個程序執行。文件被創建時,文件所有者自動擁有對該文件的讀、寫和可執行許可權,以便於對文件的閱讀和修改。用戶也可根據需要把訪問許可權設置為需要的任何組合

有三種不同類型的用戶可對文件或目錄進行訪問:文件所有者,同組用戶、其他用戶。所有者一般是文件的創建者。所有者可以允許同組用戶有權訪問文件,還可以將文件的訪問許可權賦予系統中的其他用戶。在這種情況下,系統中每一位用戶都能訪問該用戶擁有的文件或目錄

每一文件或目錄的訪問許可權都有三組,每組用三位表示,分別為文件屬主的讀、寫和執行許可權;與屬主同組的用戶的讀、寫和執行許可權;系統中其他用戶的讀、寫和執行許可權。當用ls -l命令顯示文件或目錄的詳細信息時,最左邊的一列為文件的訪問許可權。

例如:
$ ls -l sobsrc. tgz
-rw-r–r– 1 root root 483997 Ju1 l5 17:3l sobsrc. tgz
橫線代表空許可。r代表只讀,w代表寫,x代表可執行。注意這里共有10個位置。第一個字元指定了文件類型。在通常意義上,一個目錄也是一個文件。如果第一個字元是橫線,表示是一個非目錄的文件。如果是d,表示是一個目錄

例如:
- rw- r– r–
普通文件 文件主 組用戶 其他用戶
是文件sobsrc.tgz 的訪問許可權,表示sobsrc.tgz是一個普通文件;sobsrc.tgz的屬主有讀寫許可權;與sobsrc.tgz屬主同組的用戶只有讀許可權;其他用戶也只有讀許可權。

chmod 命令
chmod命令是非常重要的,用於改變文件或目錄的訪問許可權。用戶用它控制文件或目錄的訪問許可權。
該命令有兩種用法。一種是包含字母和操作符表達式的文字設定法;另一種是包含數字的數字設定法。

文字設定法

chmod [who] [+ | - | =] [mode] 文件名

命令中各選項的含義為:

操作對象who可是下述字母中的任一個或者它們的組合:
u 表示「用戶(user)」,即文件或目錄的所有者。
g 表示「同組(group)用戶」,即與文件屬主有相同組ID的所有用戶。
o 表示「其他(others)用戶」
a 表示「所有(all)用戶」。它是系統默認值。

操作符號可以是:
+ 添加某個許可權。
- 取消某個許可權。
= 賦予給定許可權並取消其他所有許可權(如果有的話)

設置mode所表示的許可權可用下述字母的任意組合:
r 可讀
w 可寫
x 可執行

X 只有目標文件對某些用戶是可執行的或該目標文件是目錄時才追加x 屬性。

s 在文件執行時把進程的屬主或組ID置為該文件的文件屬主。方式「u+s」設置文件的用戶ID位,「g+s」設置組ID位。

t 保存程序的文本到交換設備上。

u 與文件屬主擁有一樣的許可權。

g 與和文件屬主同組的用戶擁有一樣的許可權。

o 與其他用戶擁有一樣的許可權。

文件名:以空格分開的要改變許可權的文件列表,支持通配符
在一個命令行中可給出多個許可權方式,其間用逗號隔開。

例如:chmod g+r,o+r example
使同組和其他用戶對文件example 有讀許可權

chgrp命令
功能:改變文件或目錄所屬的組。

語法:chgrp [選項] group filename

該命令改變指定指定文件所屬的用戶組。其中group可以是用戶組ID,也可以是/etc/group文件中用戶組的組名。文件名是以空格分開的要改變屬組的文件列表,支持通配符。如果用戶不是該文件的屬主或超級用戶,則不能改變該文件的組。

該命令的各選項含義為:
-R 遞歸式地改變指定目錄及其下的所有子目錄和文件的屬組

chown 命令
功能:更改某個文件或目錄的屬主和屬組。這個命令也很常用。例如root用戶把自己的一個文件拷貝給用戶xu,為了讓用戶xu能夠存取這個文件,root用戶應該把這個文件的屬主設為xu,否則,用戶xu無法存取這個文件。

語法:chown [選項] 用戶或組 文件

說明:chown將指定文件的擁有者改為指定的用戶或組。用戶可以是用戶名或用戶ID。組可以是組名或組ID。文件是以空格分開的要改變許可權的文件列表,支持通配符。

該命令的各選項含義如下:
-R 遞歸式地改變指定目錄及其下的所有子目錄和文件的擁有者
-v 顯示chown命令所做的工作

passwd命令
出於系統安全考慮,Linux系統中的每一個用戶除了有其用戶名外,還有其對應的用戶口令。因此使用useradd命令增加時,還需使用passwd命令為每一位新增加的用戶設置口令;用戶以後還可以隨時用passwd命令改變自己的口令

該命令的一般格式為: passwd [用戶名] 其中用戶名為需要修改口令的用戶名。只有超級用戶可以使用「passwd 用戶名」修改其他用戶的口令,普通用戶只能用不帶參數的passwd命令修改自己的口令

該命令的使用方法如下:
輸入passwd< Enter>;
在new password:提示下輸入新的口令(在屏幕上看不到這個口令):
系統提示再次輸入這個新口令

su命令
它可以讓一個普通用戶擁有超級用戶或其他用戶的許可權,也可以讓超級用戶以普通用戶的身份做一些事情。普通用戶使用這個命令時必須有超級用戶或其他用戶的口令。如要離開當前用戶的身份,可以打exit

該命令的一般形式為: su [選項] [使用者帳號]

說明:若沒有指定使用者帳號,則系統預設值為超級用戶root。 該命令中各選項的含義分別為:
-c 執行一個命令後就結束
- 加了這個減號的目的是使環境變數和欲轉換的用戶相同
-m 保留環境變數不變

shutdown命令
shutdown 命令可以安全地關閉或重啟Linux系統,它在系統關閉之前給系統上的所有登錄用戶提示一條警告信息。該命令還允許用戶指定一個時間參數,可以是一個精確的時間,也可以是從現在開始的一個時間段。精確時間的格式是hh:mm,表示小時和分鍾;時間段由「+」和分鍾數表示。系統執行該命令後,會自動進行數據同步的工作

該命令的一般格式為: shutdown [選項] [時間] [警告信息] 命令中各選項的含義為:

-k 並不真正關機,而只是發出警告信息給所有用戶。

-r 關機後立即重新啟動。

-h 關機後不重新啟動。

-f 快速關機,重啟動時跳過fsck。

-n 快速關機,不經過init程序。

-c 取消一個已經運行的shutdown

需要特別說明的是,該命令只能由超級用戶使用

free命令
free命令的功能是查看當前系統內存的使用情況,它顯示系統中剩餘及已用的物理內存和交換內存,以及共享內存和被核心使用的緩沖區。

該命令的一般格式為: free [-b | -k | -m] 命令中各選項的含義如下:

-b 以位元組為單位顯示。

-k 以K位元組為單位顯示。

-m 以兆位元組為單位顯示

df命令
功能:檢查文件系統的磁碟空間佔用情況。可以利用該命令來獲取硬碟被佔用了多少空間,目前還剩下多少空間等信息

語法:df [選項]

說明:df命令可顯示所有文件系統對i節點和磁碟塊的使用情況。

該命令各個選項的含義如下:

-a 顯示所有文件系統的磁碟使用情況,包括0塊(block)的文件系統,如/proc文件系統。

-k 以k位元組為單位顯示。

-i 顯示i節點信息,而不是磁碟塊。

-t 顯示各指定類型的文件系統的磁碟空間使用情況。

命令
的英文原義為「disk usage」,含義為顯示磁碟空間的使用情況。

功能:統計目錄(或文件)所佔磁碟空間的大小。

語法: [選項] [Names…]

說明:該命令逐級進入指定目錄的每一個子目錄並顯示該目錄佔用文件系統數據塊(1024位元組)的情況。若沒有給出Names,則對當前目錄進行統計。

該命令的各個選項含義如下:

-s 對每個Names參數只給出佔用的數據塊總數。

date命令
date命令的功能是顯示和設置系統日期和時間。

該命令的一般格式為: date [選項] 顯示時間格式(以+開頭,後面接格式)

date 設置時間格式

命令中各選項的含義分別為:

-s datestr, –set datestr 設置datestr 描述的日期

注意:只有超級用戶才有許可權使用date命令設置時間,一般用戶只能使用date命令顯示時間。

ifconfig
作用
ifconfig用於查看和更改網路介面的地址和參數,包括IP地址、網路掩碼、廣播地址,使用許可權是超級用戶
格式
ifconfig -interface [options] address
主要參數
-interface:指定的網路介面名,如eth0和eth1
up:激活指定的網路介面卡
down:關閉指定的網路介面
address:設置指定介面設備的IP地址
netmask address:設置介面的子網掩碼
應用說明
ifconfig是用來設置和配置網卡的命令行工具。為了手工配置網路,這是一個必須掌握的命令。使用該命令的好處是無須重新啟動機器。

要賦給eth0介面IP地址207.164.186.2,並且馬上激活它,使用下面命令:

#fconfig eth0 210.34.6.89 netmask 255.255.255.128
該命令的作用是設置網卡eth0的IP地址、網路掩碼和網路的本地廣播地址。若運行不帶任何參數的ifconfig命令,這個命令將顯示機器所有激活介面的信息。帶有「-a」參數的命令則顯示所有介面的信息,包括沒有激活的介面。注意,用ifconfig命令配置的網路設備參數,機器重新啟動以後將會丟失

如果要暫停某個網路介面的工作,可以使用down參數:
#ifconfig eth0 down

netstat
作用
檢查整個Linux網路狀態
格式
netstat [-acCeFghilMnNoprstuvVwx][-A][–ip]
主要參數
-a–all:顯示所有連線中的Socket
-l–listening:顯示監控中的伺服器的Socket
-n–numeric:直接使用IP地址,而不通過域名伺服器
-p–programs:顯示正在使用Socket的程序識別碼和程序名稱
-t–tcp:顯示TCP傳輸協議的連線狀況
-u–udp:顯示UDP傳輸協議的連線狀況
-apn 查看開啟的埠
應用實例
netstat主要用於Linux察看自身的網路狀況,如開啟的埠、在為哪些用戶服務,以及服務的狀態等。此外,它還顯示系統路由表、網路介面狀態等。可以說,它是一個綜合性的網路狀態的察看工具。在默認情況下,netstat只顯示已建立連接的埠。如果要顯示處於監聽狀態的所有埠,使用-a參數即可:
#netstat -a

lsof
作用
顯示系統打開的文件
格式
lsof 〔options〕 filename
主要參數
lsof -a: 表示兩個參數都必須滿足時才顯示結果
lsof -c string: 顯示COMMAND列中包含指定字元的進程所有打開的文件
lsof -u username: 顯示所屬user進程打開的文件
lsof -g gid: 顯示歸屬gid的進程情況
lsof +d /DIR/: 顯示目錄下被進程打開的文件
lsof +D /DIR/: 同上,但是會搜索目錄下的所有目錄,時間相對較長
lsof -d FD: 顯示指定文件描述符的進程
lsof -n: 不將IP轉換為hostname,預設是不加上-n參數
lsof -i: 用以顯示符合條件的進程情況
lsof -i:port: 查看埠運行的程序。
例如:查看22埠所運行的程序 #lsof -i:22

telnet
作用
telnet表示開啟終端機階段作業,並登入遠端主機。telnet是一個Linux命令,同時也是一個協議(遠程登陸協議)
格式
telnet [-8acdEfFKLrx][-b][-e][-k][-l][-n][-S][-X][主機名稱IP地址<通信埠>]

ftp
作用
ftp命令進行遠程文件傳輸。FTP是ARPANet的標准文件傳輸協議,該網路就是現今Internet的前身,所以ftp既是協議又是一個命令。
格式
ftp [-dignv][主機名稱IP地址]
應用說明
ftp命令是標準的文件傳輸協議的用戶介面,是在TCP/IP網路計算機之間傳輸文件簡單有效的方法,它允許用戶傳輸ASCⅡ文件和二進制文件。為了使用ftp 來傳輸文件,用戶必須知道遠程計算機上的合法用戶名和口令。這個用戶名/口令的組合用來確認ftp會話,並用來確定用戶對要傳輸的文件進行什麼樣的訪問。另外,用戶需要知道對其進行ftp會話的計算機名字的IP地址
用戶可以通過使用ftp客戶程序,連接到另一台計算機上;可以在目錄中上下移動、列出目錄內容;可以把文件從遠程計算機機拷貝到本地機上;還可以把文件從本地機傳輸到遠程系統中。ftp內部命令有72個,下面列出主要幾個內部命令:
ls:列出遠程機的當前目錄
cd:在遠程機上改變工作目錄
lcd:在本地機上改變工作目錄
close:終止當前的ftp會話
get(mget):從遠程機傳送指定文件到本地機
put(mput):從本地機傳送指定文件到遠程機
quit:斷開與遠程機的連接,並退出ftp

route
作用
route表示手工產生、修改和查看路由表
格式
#route [-add][-net|-host] targetaddress [-netmask Nm][dev]If]
#route [-delete][-net|-host] targetaddress [gw Gw] [-netmask Nm] [dev]If]
主要參數
-add:增加路由
-delete:刪除路由
-net:路由到達的是一個網路,而不是一台主機
-host:路由到達的是一台主機
-netmask Nm:指定路由的子網掩碼
gw:指定路由的網關
[dev]If:強迫路由鏈指定介面。
應用實例
route命令是用來查看和設置Linux系統的路由信息,以實現與其它網路的通信。要實現兩個不同的子網之間的通信,需要一台連接兩個網路的路由器,或者同時位於兩個網路的網關來實現
在Linux系統中,設置路由通常是為了解決以下問題:該Linux系統在一個區域網中,區域網中有一個網關,能夠讓機器訪問Internet,那麼就需要將這台機器的IP地址設置為Linux機器的默認路由。使用下面命令可以增加一個默認路由:
route add 0.0.0.0 192.168.1.1

top
作用
top命令用來顯示執行中的程序進程,使用許可權是所有用戶。
格式
top [-] [d delay] [q] [c] [S] [s] [i] [n]
主要參數
d:指定更新的間隔,以秒計算
q:沒有任何延遲的更新。如果使用者有超級用戶,則top命令將會以最高的優先序執行
c:顯示進程完整的路徑與名稱
i:不顯示任何閑置(Idle)或無用(Zombie)的行程
n:顯示更新的次數,完成後將會退出top。
說明
top命令是Linux系統管理的一個主要命令,通過它可以獲得許多信息。這里我們結合圖1來說明它給出的信息
下面列出了詳細解釋
PID(Process ID):進程標示號
USER:進程所有者的用戶名
PR:進程的優先順序別
NI:進程的優先順序別數值
VIRT:進程佔用的虛擬內存值
RES:進程佔用的物理內存值
SHR:進程使用的共享內存值
S:進程的狀態,其中S表示休眠,R表示正在運行,Z表示僵死狀態,N表示該進程優先值是負數
%CPU:該進程佔用的CPU使用率
%MEM:該進程佔用的物理內存和總內存的百分比
TIME+:該進程啟動後佔用的總的CPU時間
Command:進程啟動的啟動命令名稱,如果這一行顯示不下,進程會有一個完整的命令行。

㈤ linux 內核中物理地址轉換為虛擬地址一些不懂的地方,麻煩指點

  1. GPFCON 0X56000050
    GPFDAT 0x56000054
    GPFUP 0x56000058
    Reserved 0x5600005c

這是四個連續的物理地址,每個長度為4位元組,所以是16


2. 在 32位系統上, sizeof(指針) 是4,所以 sizeof(xxxx xxxx *) 總是等於4,由於gpfcon 指向的是被映射後的0X56000050, gpfdata 就指向0x56000054

㈥ 如何從linux內核上預留DDR物理內

luther@gliethttp:~$ vim /proc/iomem
00100000-5bf0ffff : System RAM
00100000-00575553 : Kernel code
00575554-0078d307 : Kernel data
0081a000-008a809f : Kernel bss
可以看到kernel code和data,bss使用的ram就是我們的系統內存,
luther@gliethttp:~$ dmesg也可以看到物理內存的情況
BIOS-provided physical RAM map:
[ 0.000000] BIOS-e820: 0000000000000000 - 000000000009dc00 (usable)
[ 0.000000] BIOS-e820: 000000000009dc00 - 00000000000a0000 (reserved)
[ 0.000000] BIOS-e820: 00000000000d2000 - 0000000000100000 (reserved)
[ 0.000000] BIOS-e820: 0000000000100000 - 000000005bf10000 (usable)
[ 0.000000] BIOS-e820: 000000005bf10000 - 000000005bf19000 (ACPI data)
[ 0.000000] BIOS-e820: 000000005bf19000 - 000000005bf80000 (ACPI NVS)
[ 0.000000] BIOS-e820: 000000005bf80000 - 0000000060000000 (reserved)
[ 0.000000] BIOS-e820: 00000000e0000000 - 00000000f0000000 (reserved)
[ 0.000000] BIOS-e820: 00000000fec00000 - 00000000fec10000 (reserved)
[ 0.000000] BIOS-e820: 00000000fee00000 - 00000000fee01000 (reserved)
[ 0.000000] BIOS-e820: 00000000fff80000 - 0000000100000000 (reserved)
luther@gliethttp:~$ vim /proc/meminfo
MemTotal: 1478540 kB
MemFree: 868544 kB
Buffers: 31084 kB
Cached: 321672 kB
SwapCached: 0 kB

luther@gliethttp:~$ sudo vim /boot/grub/grub.cfg
原來的
linux /boot/vmlinuz-2.6.31-14-generic root=UUID=9a04b75d-22f4-4100-a8b0-a07ef00ead04 ro quiet splash
新改的
linux /boot/vmlinuz-2.6.31-14-generic root=UUID=9a04b75d-22f4-4100-a8b0-a07ef00ead04 ro quiet splash mem=1442M

修改之後dmesg將多出如下一行提示:
[ 0.000000] user-defined physical RAM map:
[ 0.000000] user: 0000000000000000 - 000000000009dc00 (usable)
[ 0.000000] user: 000000000009dc00 - 00000000000a0000 (reserved)
[ 0.000000] user: 00000000000d2000 - 0000000000100000 (reserved)
[ 0.000000] user: 0000000000100000 - 000000005a200000 (usable)
[ 0.000000] user: 000000005bf10000 - 000000005bf19000 (ACPI data)
[ 0.000000] user: 000000005bf19000 - 000000005bf80000 (ACPI NVS)
[ 0.000000] user: 000000005bf80000 - 0000000060000000 (reserved)
[ 0.000000] user: 00000000e0000000 - 00000000f0000000 (reserved)
[ 0.000000] user: 00000000fec00000 - 00000000fec10000 (reserved)
[ 0.000000] user: 00000000fee00000 - 00000000fee01000 (reserved)
[ 0.000000] user: 00000000fff80000 - 0000000100000000 (reserved)

之前
[ 0.000000] 583MB HIGHMEM available.
之後
[ 0.000000] 554MB HIGHMEM available.

這樣000000005a200000 - 000000005bf10000之間的29M物理內存就被預留出來供我們的DMA使用了[luther.gliethttp]

==================================================
=====第1步=============================================================================
[root@localhost ~]# cat /proc/meminfo
MemTotal: 1026124 kB

[root@localhost ~]# cat /proc/iomem
00000000-0009efff : System RAM
00000000-00000000 : Crash kernel
0009f000-0009ffff : reserved
000a0000-000bffff : Video RAM area
000c0000-000c7fff : Video ROM
000d4000-000d4fff : Adapter ROM
000f0000-000fffff : System ROM
00100000-3f6effff : System RAM // 內存首尾地址,我們將從0x3f6effff結尾開始往前保留300M空間
00400000-006081dd : Kernel code
006081de-006e19bb : Kernel data
3f6f0000-3f6f2fff : ACPI Non-volatile Storage
3f6f3000-3f6fffff : ACPI Tables
40000000-400003ff : 0000:00:1f.1
f0000000-f7ffffff : 0000:00:02.0
f8000000-f8ffffff : PCI Bus #01
f8000000-f87fffff : 0000:01:04.0
f8000000-f87fffff : ceopen_dmp
f8800000-f880ffff : 0000:01:04.0
f8800000-f880ffff : ceopen_dmp
f8810000-f88100ff : 0000:01:03.0
f8810000-f88100ff : 8139too
f8811000-f88111ff : 0000:01:04.0
f8811000-f88111ff : ceopen_dmp
f9000000-f93fffff : 0000:00:00.0
f9400000-f947ffff : 0000:00:02.0
f9480000-f94803ff : 0000:00:1d.7
f9480000-f94803ff : ehci_hcd
f9481000-f94811ff : 0000:00:1f.5
f9481000-f94811ff : Intel ICH5
f9482000-f94820ff : 0000:00:1f.5
f9482000-f94820ff : Intel ICH5
fec00000-ffffffff : reserved
=====第2步=============================================================================
向cmdline加入mem和reserved啟動參數

hex(0x3f6f0000-300*1024*1024)等於0x2caf0000,這里表示從0x3f6effff結尾開始往前保留300M空間
hex(300*1024*1024)等於0x12c00000

[root@localhost ~]# vim /boot/grub/menu.lst
kernel /boot/vmlinuz-2.6.18-53.el5 ro root=LABEL=/ rhgb quiet mem=0x2caf0000 reserve=0x2caf0000,0x12c00000
即保留0x2caf0000開始的300*1024*1024位元組內存

kernel/resource.c|820| __setup("reserve=", reserve_setup);
2.6.30.4內核cmdline常用命令行參數與相應處理函數

[root@localhost ~]# cat /proc/meminfo
MemTotal: 721324 kB

[root@localhost ~]# cat /proc/iomem
00000000-0009efff : System RAM
00000000-00000000 : Crash kernel
0009f000-0009ffff : reserved
000a0000-000bffff : Video RAM area
000c0000-000c7fff : Video ROM
000d4000-000d4fff : Adapter ROM
000f0000-000fffff : System ROM
00100000-2caeffff : System RAM
00400000-006081dd : Kernel code
006081de-006e19bb : Kernel data
2caf0000-3f6effff : reserved // 這就是我們保留出來的內存了,和上面的內存結構一致[luther.gliethttp]
3f6f0000-3f6f03ff : 0000:00:1f.1
f0000000-f7ffffff : 0000:00:02.0
f8000000-f8ffffff : PCI Bus #01
f8000000-f87fffff : 0000:01:04.0
f8800000-f880ffff : 0000:01:04.0
f8810000-f88100ff : 0000:01:03.0
f8810000-f88100ff : 8139too
f8811000-f88111ff : 0000:01:04.0
f9000000-f93fffff : 0000:00:00.0
f9400000-f947ffff : 0000:00:02.0
f9480000-f94803ff : 0000:00:1d.7
f9480000-f94803ff : ehci_hcd
f9481000-f94811ff : 0000:00:1f.5
f9481000-f94811ff : Intel ICH5
f9482000-f94820ff : 0000:00:1f.5
f9482000-f94820ff : Intel ICH5

=====第3步=============================================================================
雖然預留了300M空間,但是ioremap_nocache不能映射全部的300M空間,不知道為什麼,可能和
系統自身有關系,下面是具體的映射代碼,因為已經將region做了reserved申請命名,所以
我們也就不需要再使用request_mem_region(pdma, dma_size, "gliethttp_dma_area")來獲得region了.

const dma_addr_t pdma = 0x2caf0000;
const size_t dma_size = (280*1024*1024);

kdma = ioremap_nocache(pdma, dma_size);
if (kdma == NULL)
return -ENOMEM;
其 實2G內存也沒有問題,mem=1.6G,然後ko驅動使用mmap將1.6G-2G之間的內存物理地址直接映射給user空間,這樣user空間就可以 直接向1.6G-2G物理內存寫入數據了,然後PCI直接通過寄存器配置,向1.6G-2G的物理地址讀取數據,這樣透過ko驅動將user和pci建立 了直連,當然了,因為內核線性地址為3G-4G只有1G的內存可以被映射,所以2G內存的另外1G內存就屬於高端內存了,所以內核ko驅動不能映射 1.6G-2G的內存到內核線性地址空間,但是可以通過kmap短暫的映射來使用[luther.gliethttp]

static void __init early_mem(char **p)
{
static int usermem __initdata = 0;
unsigned long size, start;

if (usermem == 0) {
usermem = 1;
meminfo.nr_banks = 0;
}

start = PHYS_OFFSET;
size = memparse(*p, p);
if (**p == '@')
start = memparse(*p + 1, p);

arm_add_memory(start, size);
}
__early_param("mem=", early_mem);

以下轉自:http://hi..com/linuxbestbest/blog/item/9bc8dbdb72127763d0164e9c.html

有時,內核不能識別你的全部內存(RAM)。你可以用 cat /proc/meminfo 命令來校驗。
查看一下所顯示的數量是否與你所知的系統內存相同。如果不同,在 /boot/grub/grub.conf 文件中添加以下一行:
mem=xxM
把 xx 替換成你擁有的內存數量(以 MB 為單位)。
在 /boot/grub/grub.conf 文件中,以上的例子與下面相似:,
#NOTICE: You have a /boot partition. This means that
# all kernel paths are relative to /boot/
default=0
timeout=30
splashimage=(hd0,0)/grub/splash.xpm.gz
title Red Hat Linux (2.4.20-2.47.1)
root (hd0,0)
kernel /vmlinuz-2.4.20-2.47.1 ro root=/dev/hda3 mem=128M
當你重新引導後,grub.conf 文件中的改變將會反映在你的系統中。
或者,你可以在 /etc/lilo.conf 文件中添加以下一行:
append="mem=xxM"
注意,append 命令在 GRUB 和 LILO 中都可用。
把 xx 替換成你擁有的內存數量(以 MB 為單位)。切記,每映像後補的行會完全覆寫全局後補的行。把這行添加到每映像描述中可能值得一試。
在 /etc/lilo.conf 文件中,以上的例子與下面相似:
boot=/dev/sda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50

image=/boot/vmlinuz-2.4.20-2.47.1
label=linux
root=/dev/sda1
initrd=/boot/initrd-2.4.20-2.47.1.img
read-only
append="mem=128M"
記住在改變了 /etc/lilo.conf 文件後運行 /sbin/lilo -v 命令。
請注意,在 GRUB 或 LILO 中指定所用標簽(映像)時傳遞這一選項可以獲得同樣的效果。
當你已載入 GRUB 引導屏幕後,鍵入 e 來編輯。你所選定的引導標簽的配置文件中的項目列表就會在你面前出現。
選擇開頭為 kernel 的行,然後鍵入 e 來編輯這一引導項目。
在 kernel 行的末尾,添加:
mem=xxM

append=xxM
這里的 xx 與你系統的內存數量相同。
按 [Enter] 鍵來退出編輯模式。
回到 GRUB 屏幕後,鍵入 b 來用你的新內存指數引導。
在圖形化的 LILO 屏幕上,按 [Ctrl]-[x] 退回到 boot: 提示。接下來,在 boot: 提示下輸入:
linux mem=xxM
請記住將 xx 替換成你系統的內存數量。按 [Enter] 鍵來引導。

http://blog.sina.com.cn/s/blog_677570ff0100l1ng.html
http://www.kerneltravel.net/jiaoliu/map.htm

㈦ 怎樣進入linux內核文件目錄

1、先是輸入賬號密碼進入centos7。

㈧ linux操作系統內核怎麼進入

ioctl啊 系統調用啊,寫點對於的驅動ko掛上就可以了

㈨ linux內核地址映射

其實阿,你忽略了一點,不管進程如何切換,內核的載入位置一致保持不便,而且映射內核的幾個頁面在啟動頁式管理之前,就已經映射到幾個固定的頁面中。這樣保持了內核位於任何進程地址空間的固定位置。進程切換時,只是將這些頁表的頁目錄項添加到進程的頁目錄中。這個是安排一條中斷返回指令(iret),從當前的PC開始執行。其實你後面已經對前面做答了! 2中,那句話的意思是,內核在進程的地址空間中頁面映射是相同的! 理解了嗎?好好加油,我搜了好長時間的svr4,一致找不到,你有嗎?

㈩ linux內核存放的位置是在/usr/src/kernels下還是/boot/vmlinuz下

是vmlinuz啊~~網路有解釋啊~~

vmlinuz是可引導的、壓縮的內核。「vm」代表 「Virtual Memory」。Linux 支持虛擬內存,不像老的操作系統比如DOS有640KB內存的限制。Linux能夠使用硬碟空間作為虛擬內存,因此得名「vm」。vmlinuz是可執行的Linux內核,它位於/boot/vmlinuz,它一般是一個軟鏈接。
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。
內核文件中包含一個微型的gzip用於解壓縮內核並引導它。兩者的不同之處在於,老的zImage解壓縮內核到低端內存(第一個640K), bzImage解壓縮內核到高端內存(1M以上)。如果內核比較小,那麼可以採用zImage 或bzImage之一,兩種方式引導的系統運行時是相同的。大的內核採用bzImage,不能採用zImage。
vmlinux是未壓縮的內核,vmlinuz是vmlinux的壓縮文件。
vmlinux-2.4.20-8是未壓縮內核,vmlinuz-2.4.20-8是vmlinux-2.4.20-8的壓縮文件。

閱讀全文

與linux內核如何操作物理地址相關的資料

熱點內容
word中化學式的數字怎麼打出來 瀏覽:705
乙酸乙酯化學式怎麼算 瀏覽:1372
沈陽初中的數學是什麼版本的 瀏覽:1318
華為手機家人共享如何查看地理位置 瀏覽:1010
一氧化碳還原氧化鋁化學方程式怎麼配平 瀏覽:848
數學c什麼意思是什麼意思是什麼 瀏覽:1370
中考初中地理如何補 瀏覽:1260
360瀏覽器歷史在哪裡下載迅雷下載 瀏覽:671
數學奧數卡怎麼辦 瀏覽:1351
如何回答地理是什麼 瀏覽:989
win7如何刪除電腦文件瀏覽歷史 瀏覽:1023
大學物理實驗干什麼用的到 瀏覽:1449
二年級上冊數學框框怎麼填 瀏覽:1659
西安瑞禧生物科技有限公司怎麼樣 瀏覽:834
武大的分析化學怎麼樣 瀏覽:1213
ige電化學發光偏高怎麼辦 瀏覽:1301
學而思初中英語和語文怎麼樣 瀏覽:1608
下列哪個水飛薊素化學結構 瀏覽:1388
化學理學哪些專業好 瀏覽:1453
數學中的棱的意思是什麼 瀏覽:1017