㈠ 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 内核中物理地址转换为虚拟地址一些不懂的地方,麻烦指点
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的压缩文件。