archlinux arm要怎么设置才会显示开机加载过程

新手园地& & & 硬件问题Linux系统管理Linux网络问题Linux环境编程Linux桌面系统国产LinuxBSD& & & BSD文档中心AIX& & & 新手入门& & & AIX文档中心& & & 资源下载& & & Power高级应用& & & IBM存储AS400Solaris& & & Solaris文档中心HP-UX& & & HP文档中心SCO UNIX& & & SCO文档中心互操作专区IRIXTru64 UNIXMac OS X门户网站运维集群和高可用服务器应用监控和防护虚拟化技术架构设计行业应用和管理服务器及硬件技术& & & 服务器资源下载云计算& & & 云计算文档中心& & & 云计算业界& & & 云计算资源下载存储备份& & & 存储文档中心& & & 存储业界& & & 存储资源下载& & & Symantec技术交流区安全技术网络技术& & & 网络技术文档中心C/C++& & & GUI编程& & & Functional编程内核源码& & & 内核问题移动开发& & & 移动开发技术资料ShellPerlJava& & & Java文档中心PHP& & & php文档中心Python& & & Python文档中心RubyCPU与编译器嵌入式开发驱动开发Web开发VoIP开发技术MySQL& & & MySQL文档中心SybaseOraclePostgreSQLDB2Informix数据仓库与数据挖掘NoSQL技术IT业界新闻与评论IT职业生涯& & & 猎头招聘IT图书与评论& & & CU技术图书大系& & & Linux书友会二手交易下载共享Linux文档专区IT培训与认证& & & 培训交流& & & 认证培训清茶斋投资理财运动地带快乐数码摄影& & & 摄影器材& & & 摄影比赛专区IT爱车族旅游天下站务交流版主会议室博客SNS站务交流区CU活动专区& & & Power活动专区& & & 拍卖交流区频道交流区
空间积分0 信誉积分52 UID阅读权限10积分9帖子精华可用积分9 专家积分0 在线时间24 小时注册时间最后登录
白手起家, 积分 9, 距离下一级还需 191 积分
帖子主题精华可用积分9 专家积分0 在线时间24 小时注册时间最后登录
论坛徽章:0
初次接触 Archlinux
记得安装好了之后默认是没有 /etc/rc.conf 这个文件的,后来我自己添加了一个。
以下是我的:/etc/rc.conf 文件内容
wpa_supplicant -Dwired -ieth0 -c/etc/wpa_supplicant/wpa_supplicant.conf -B
dhclient eth0
我原本设想是开机自动拨号,结果诡异的是开机之后用普通用户登录,结果没有像想象中的自动拨号,依旧上不了网。完了换一个终端用 root 用户登录以下,结果什么都没干就拨号上网了。/etc/rc.conf 不是开机启动文件吧,怎么这样以来感觉变成了 root 的登录启动文件了。想请教以下各位:
1)我所遇到的是什么情况,/etc/rc.conf 为什么只在 root 登录后才执行?而不是开机就执行。
2)如果 /etc/rc.conf 不是开机启动文件的话,那么 Archlinux 下开机执行命令应该如何优雅的进行呢?
&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp
空间积分0 信誉积分177 UID568917阅读权限10积分172帖子精华可用积分172 专家积分0 在线时间110 小时注册时间最后登录
白手起家, 积分 172, 距离下一级还需 28 积分
帖子主题精华可用积分172 专家积分0 在线时间110 小时注册时间最后登录
论坛徽章:0
你在linuxsir问过吧?
arch现在的init程序已从initscript转到了systemd
rc.conf是initscript使用的配置文件
现在systemd统一用systemctl命令管理
网络设置去arch wiki 搜 netcfg
wiki里也有systemd的介绍和使用
空间积分0 信誉积分52 UID阅读权限10积分9帖子精华可用积分9 专家积分0 在线时间24 小时注册时间最后登录
白手起家, 积分 9, 距离下一级还需 191 积分
帖子主题精华可用积分9 专家积分0 在线时间24 小时注册时间最后登录
论坛徽章:0
OK,谢谢你的解答,我没有在 linuxsir 上问过。我现在大致明白怎么回事了~~~回复
darrenlee3
北京皓辰网域网络信息技术有限公司. 版权所有 京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:
广播电视节目制作经营许可证(京) 字第1234号
中国互联网协会会员&&联系我们:
感谢所有关心和支持过ChinaUnix的朋友们
转载本站内容请注明原作者名及出处身为一个小小弱菜,却有个不安分的心,不停的尝试发行版,Arch应该是在7月多去掉了AIF安装框架,安装过程相对就比较麻烦了,不过还好它wiki是相当的全面,网上还有很多资料可以参考下载镜像烧进U盘就不多说了,主菜单选择 "Boot Arch Linux" 并按回车,系统将加载并给出登录提示,自动以 'root' 登录。系统默认使用美式键盘映射。
网络连接archlinux安装是特别依赖网络的,没有网络安装的话就X疼了。 安装程序会自动执行dhcpcd建立连接,可以试试ping一下百度什么的,不行的话用以下方法手动配置如果是有线连接:激活接口:
# ip link set eth0 up
添加ip地址:
# ip addr add &ip 地址&/&子网掩码& dev &接口名&
用类似下面的命令添加网关,ip 地址替换为实际的网关地址:
# ip route add default via &ip 地址&
编辑/etc/resolv.conf&如下, 替换你的DNS服务器IP地址和本地域名:
# nano /etc/resolv.conf
nameserver 61.23.173.5
nameserver 61.95.849.8
如果是无线网络:下面的示例中使用 wlan0&作为接口,linksys&作为 ESSID。请根据实际情况修改。确定网络接口:
# lspci | grep -i net
用 iwconfig 确定 udev 已经载入驱动,而且驱动程序创建了可用的无线内核接口:输出和下面不相似表示驱动没有载入,需要自己加入
lo no wireless extensions.
eth0 no wireless extensions.
unassociated
Mode:Managed
Access Point: Not-Associated
Bit Rate:0 kb/s
Tx-Power=20 dBm
Sensitivity=8/0
Retry limit:7
RTS thr:off
Fragment thr:off
Power Management:off
Link Quality:0
Signal level:0
Noise level:0
Rx invalid nwid:0
Rx invalid crypt:0
Rx invalid frag:0
Tx excessive retries:0
Invalid misc:0
Missed beacon:0
wlan0 为可用接口。启用接口:
# ip link set wlan0 up
在安装 Archlinux 时,无线网络驱动和工具已经包含在 base 组中。请确保为无线网卡安装正确的驱动。通常在初始化的光盘系统和新装的系统中,Udev 会加载合适的驱动,并创建无线网络接口。如果在安装 Archlinux 系统的时候没有配置无线网卡,请确保下列所需的软件包已经通过 pacman 安装完毕(驱动,必须的固件, wireless_tools,iw,wpa_supplicant然后使用netcfg提供的 wifi-menu 连接到网络:
# wifi-menu wlan0
如果是需要拨号上网的 可选择pppoe
分区现在的arch有三种分区工具,如果你是GPT分区表的话可以选择cgdisk,mbr选择cfdisk,gparted则是两者都支持。
弱菜君用的mbr分区表
# cfdisk /dev/sda
然后根据需求分区分区之后,还需要用 mkfs 将分区格式化为选定的文件系统,我使用的是ext4文件系统
# mkfs.ext4 /dev/sda1
# mkfs.ext4 /dev/sda2
刷新一下分区表(如果变动比较大要在格式化之前刷新一下分区表)
# partprobe /dev/sda
挂载分区要检查当前磁盘的标识符和布局:
# lsblk /dev/sda
先挂载根分区到/mnt.
# mount /dev/sda1 /mnt
格式化完应该就一个lost+found
然后挂载/home分区和其余单独分区(/boot, /var 等)。然后在 /mnt 中创建 home 目录并挂载分区:
# mkswap /dev/sdaX && swapon /dev/sdaX ##分区格式化为swap,并且创造swap分区
# mount /dev/sdaX /mnt ##挂载/分区到/mnt上
# mkdir /mnt/home && mount /dev/sdaY /mnt/home ##创建home文件,并且将Y分区挂载到上面
编辑源列表把163的源放在最前面
# nano /etc/pacman.d/mirrorlist
Server = /archlinux/$repo/os/$arch
然后升级文件列表
pacman -Syy
#nano /etc/pacman.conf
[options]前面的选项改成这样
RootDir = /mnt
DBPath = /mnt/var/lib/pacman/
CacheDir = /mnt/var/cache/pacman/pkg/
LogFile = /mnt/var/log/pacman.log
GPGDir = /mnt/etc/pacman.d/gnupg/
SigLevel = Never
后面core、extra、community的SigLevel = PackageRequired之前加#注释掉
使用 pacstrap 脚本安装基本系统:
# pacstrap /mnt base base-devel
无线的同时安装以下软件包,否则chroot后上不了网
#pacstrp /mnt wireless_tools wpa_supplicant wpa_actiond dialog
#genfstab -p /mnt && /mnt/etc/fstab
Chroot到新系统
#arch-chroot /mnt
#vi /etc/locale.gen
选择你需要的本地化类型,移除前面的#即可
en_US.UTF-8 UTF-8
en_GB.UTF-8 UTF-8
zh_CN.GB18030 GB18030
zh_CN.GBK GBK
zh_CN.UTF-8 UTF-8
zh_CN GB2312
# locale-gen
locale.conf 文件默认不存在,一般设置LANG就行了,它是其它设置的默认值。
LANG=zh_CN.UTF-8
LC_TIME=en_GB.UTF-8
时区编辑文件 /etc/timezoneAsia/Shanghai同时,将/etc/localtime 软链接到 /usr/share/zoneinfo/Zone/SubZone.其中 Zone 和 Subzone 替换为所在时区
# ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
硬件时间在 /etc/adjtime 中设置,默认、推荐的设置为UTC可用以下命令自动生成# hwclock --systohc --localtimeNTPd是使用网络时间协议将 GNU/Linux 系统的软件时钟与 Internet 时间服务器同步的最常见的方法安装ntp
pacman -S ntp
想要仅仅同步时钟一次,不想启动守护进程的话,运行:
# ntpd -qg
# hwclock -s
内核模块一般情况下 udev 会自动加载需要的模块,大部分用户都不需要手动修改。这里只需要加入真正需要的模块。/etc/modules-load.d/中保存内核启动时加入模块的配置文件。每个配置文件已/etc/modules-load.d/.conf的格式命名。配置文件中包含需要装入的内核列表,每个一行。空行和以 # 或 ; 开头的行直接被忽略。比如
/etc/modules-load.d/virtio-net.conf
# Load virtio-net.ko at boot
virtio-net
注意:新版本arch使用systemd系统和服务管理器。systemd 是 Linux 下的一款系统和服务管理器,兼容 SysV 和 LSB 的启动脚本。systemd的特性有:支持并行化任务;同时采用 socket 式与 D-Bus 总线式激活服务;按需启动守护进程(daemon);利用 Linux 的 cgroups 监视进程;支持快照和系统恢复;维护挂载点;各服务间基于依赖关系进行精密控制。systemd 完全可以替代 Arch 默认的 sysvinit 启动系统。
系统默认安装systemd。建议所有系统都使用 systemd 的配置文件。启用 net-auto-wireless 服务
# systemctl enable net-auto-wireless.service
Make sure that the correct wireless interface (usually wlan0) is set in /etc/conf.d/netcfg:
# nano /etc/conf.d/netcfg
WIRELESS_INTERFACE="wlan0"
设置主机名
/etc/hostname
myhostname
设置 Root 密码并创建一般用户
# useradd -m -g users -s /bin/bash archie
# passwd archie
安装配置启动加载器BIOS 系统由三个供选择 - Syslinux, GRUB, 和 LILO. 按个人喜好选择一个引导syslinux
# pacman -S syslinux
# syslinux-install_update -iam
编辑 /boot/syslinux/syslinux.cfg,将 / 指向正确的根分区,这是必须的,否则 Arch 启动不起来。将"sda3"修改为实际的根分区。同样,修改LABEL archfallback.
# nano /boot/syslinux/syslinux.cfg
LABEL arch
APPEND root=/dev/sda3 ro
如果你有windows系统,将 windows启动项目前的#删除。
grub 我是用的grub安装到 BIOS 主板系统:
# pacman -S grub-bios
# grub-install --target=i386-pc --recheck /dev/sda
# cp /usr/share/locale/en\@quot/LC_MESSAGES/grub.mo /boot/grub/locale/en.mo
虽然手动配置grub.cfg完全可以工作,建议自动生成这个文件。要搜索硬盘上安装的其它操作系统,请先用 # pacman -S os-prober 安装 os-prober。
# grub-mkconfig -o /boot/grub/grub.cfg
安装桌面pacman -S lxde或者pacman -S gnome-core这个自己选择,kde、gnome、lxde或者可以选用openbox、awesome等WM
安装完成后, 复制/etc/xdg/openbox里的3个文件到 ~/.config/openbox :menu.xml rc.xml autostart也可以运行以下命令
mkdir -p ~/.config/openbox
cp /etc/xdg/openbox/menu.xml /etc/xdg/openbox/rc.xml /etc/xdg/openbox/autostart ~/.config/openbox
设置开机自动启动的程序用你喜欢的编辑器打开/etc/xdg/lxsession/LXDE/autostart,然后在其中添加你要开机自动启动的程序,就像这样:
@xscreensaver -no-splash
@lxpanel --profile LXDE
@pcmanfm -d
@xcompmgr -Ss -n -Cc -fF -I-10 -O-10 -D1 -t-3 -l-4 -r4 &
启动桌面环境
使用登录管理器通过启动登录管理器(或称显示管理器),即可进行图形界面登录。目前,Arch 提供了 GDM、KDM、SLiM、XDM 和 LXDM 的 systemd 服务文件。以 KDM 为例,配置开机启动:
# systemctl enable lxdm.service
执行上述命令后,登录管理器应当能正常工作了。
启动速度优化systemd 自己实现了一个 readahead,可以用来提高开机效率。不过,效果会因内核版本和硬件情况而不同(极端的还会变慢)。开启 readahead:
# systemctl enable systemd-readahead-collect.service systemd-readahead-replay.service
要知道,readahead 的超级牛力只有在重启几次后才会显现。
安装显卡驱动如果是nvidia的显卡,首先安装yaourt
最简单安装Yaourt的方式是添加Yaourt源至 /etc/pacman.conf:
[archlinuxfr]
Server = http://repo.archlinux.fr/$arch
[archlinuxfr]
Server = http://repo-fr.archlinuxcn.org/$arch
同步并安装:
# pacman -Syu yaourt
安装nvidia-all脚本
yaourt -S nvidia-all
假如使用的是最新的显卡,也许需要使用AUR上的驱动nvidia-beta和nvidia-utils-beta,因为稳定版的驱动不支持一些新引入的特性。安装的时候,如果 pacman 询问您移除 libgl 并且因为依赖无法移除,可以使用 # pacman -Rdd libgl 移除 libgl.自动配置nvidia,创建一个基本的配置文件/etc/X11/xorg.conf
#nvidia-xconfig
编辑/etc/X11/xorg.conf :关闭启动时的Logo添加"NoLogo"选项到Device节里:
Option "NoLogo" "1"
启用硬件加速注意: 从97.46.xx版本开始RenderAccel就已经被默认启用。添加"RenderAccel"选项在Device节下面:
Option "RenderAccel" "1"
32位应用程序无法启动
在64位系统下,安装lib32-nvidia-utils对应相同版本的64位驱动可以修复这个问题。
笔记本触摸板驱动
笔记本(或触摸屏)用户需要 synaptics 软件包以支持触摸板/触摸屏:
# pacman -S xf86-input-synaptics
中文化与安装字体除了设置好locale,还需要安装中文字体。常用的免费(GPL或兼容版权)中文字体有:
wqy-bitmapfont
wqy-zenhei
ttf-arphic-ukai
ttf-arphic-uming
ttf-fireflysung
wqy-microhei(AUR中)
wqy-microhei-lite(AUR中)
系统字体将默认安装到/usr/share/fonts。也可以手动安装字体,将字体复制到 /usr/share/fonts,进入/usr/share/fonts,执行 fc-cache -fv
更新系统更新前,请阅读 新闻 (或者 通告邮件列表)。开发者通常会针对已知问题提供需要配置和修改的重要信息。在升级前访问这些页面是个好习惯。同步、刷新、升级整个系统:
# pacman -Syu
卸载分区并重启系统如果还在 chroot 环境,先用 exit 命令退出系统:
卸载/mnt中挂载的系统:
# umount /mnt/{boot,home,}
硬盘里有ntfs分区的需要挂载,编辑/etc/fstab
首先在/mnt创建挂载到的文件夹
$sudo mkdir /mnt/winc /mnt/wind /mnt/wine
安装ntfs-3g
$sudo pacman -S ntfs-3g
编辑 fstab
$sudo leafpad /etc/fstab
添加如下类似文件,自己修改
/dev/sda1 /media/winc ntfs defaults,iocharset=utf8 0 0
/dev/sda5 /media/wind ntfs defaults,iocharset=utf8 0 0
/dev/sda6 /media/wine ntfs defaults,iocharset=utf8 0 0
下面是lxde的简易配置没有快捷键真不爽,所以首先设置它网上都是说rc.xml用于设置快捷键,但是很奇怪,我发现登录后,快捷键没生效,不过如果运行了fusion-icon,点击一下reload window manager,快捷键就能生效继续研究发现,~/.config/openbox下还有一个lxde-rc.xml文件,这里也可以设置快捷键,和上面相反,这里的设置在登录后直接就能用,但reload wm后就不能用了。所以办法是,对两个文件都设置,格式如下:
&&keybind&key="F9"&
& & & &action&name="Execute"&
& & & & &execute&gnome-terminal -x mocp&/execute&
& & & &/action&
& & &/keybind&
其中第一行是要设置的快捷键,第三行是相应的命令,把它放在 和之间。LXDE下我找不到调节音量的东东,所以把音量调节绑定到快捷键了:
&!-- 音量調節 --&
&keybind&key="C-KP_3"&
&action&name="Execute"&
&command&amixer -q&set&Master&3%-&/command&
&/keybind&
&keybind&key="C-KP_9"&
&action&name="Execute"&
&command&amixer -q&set&Master unmute&3%+&/command&
&/keybind&
接下来设置一下字体DPI,默认的太小了,改为96:
$ echo Xft.dpi:96 && ~/.Xresources
如果使用startx启动Openbox的话,要在.xinitrc的开始处添加一行:
xrdb -merge ~/.Xresources
其它设置可以用obconf,LXDE会继承gnome的一些东西,比如登录时自动运行的程序,在/.config/autostart目录下。主题之类的可以在&程序菜单-首选项-外观&那里设置
#编辑~/.xprofile,使fcitx自启动
LANG=zh_CN.UTF-8
export XMODIFIERS="@im=fcitx"
接下来就是使用sudo,自动挂载U盘,配置vim zsh 看个人需要了。到这里弱菜君的安装笔记就算是结束了,Arch采用systemed,表示很不习惯,也不是很经常用,也没有用过逆天的aur,现在不怎么进Arch了,主要用Debian,寒假准备最后换成Gentoo后稳定下来。
阅读(...) 评论()Linux内核启动流程详细分析_Linux教程_Linux公社-Linux系统门户网站
你好,游客
Linux内核启动流程详细分析
来源:Linux社区&
作者:ce123_zhouwei
Linux内核启动流程&
  arch/arm/kernel/head-armv.S&
  该文件是内核最先执行的一个文件,包括内核入口ENTRY(stext)到start_kernel间的初始化代码,
  主要作用是检查CPU ID, Architecture Type,初始化BSS等操作,并跳到start_kernel函数。在执行前,处理器应满足以下状态:&
r0 - should be 0&r1 - unique architecture number&MMU - off&I-cache - on or off&D-cache & off&
1 /* 部分源代码分析 */
2 /* 内核入口点 */
3 ENTRY(stext)
4 /* 程序状态,禁止FIQ、IRQ,设定SVC模式 */
5 mov r0, #F_BIT | I_BIT | MODE_SVC@ make sure svc mode
6 /* 置当前程序状态寄存器 */
7 msr cpsr_c, r0 @ and all irqs disabled
8 /* 判断CPU类型,查找运行的CPU ID值与Linux编译支持的ID值是否支持 */
9 bl __lookup_processor_type
10 /* 跳到__error */
11 teq r10, #0 @ invalid processor?
12 moveq r0, #'p' @ yes, error 'p'
13 beq __error
14 /* 判断体系类型,查看R1寄存器的Architecture Type值是否支持 */
15 bl __lookup_architecture_type
16 /* 不支持,跳到出错 */
17 teq r7, #0 @ invalid architecture?
18 moveq r0, #'a' @ yes, error 'a'
19 beq __error
20 /* 创建核心页表 */
21 bl __create_page_tables
22 adr lr, __ret @ return address
23 add pc, r10, #12 @ initialise processor
24 /* 跳转到start_kernel函数 */
25 b start_kernel
1. start_kernel()函数分析
  下面对start_kernel()函数及其相关函数进行分析。&
1.1 lock_kernel()&
1 /* Getting the big kernel lock.
2 * This cannot happen asynchronously,
3 * so we only need to worry about other
4 * CPU's.
6 extern __inline__ void lock_kernel(void)
if (!++current-&lock_depth)
spin_lock(&kernel_flag);
  kernel_flag 是一个内核大自旋锁,所有进程都通过这个大锁来实现向内核态的迁移。
  只有获得这个大自旋锁的处理器可以进入内核,如中断处理程序等。在任何一对 lock_kernel/unlock_kernel函数里至多可以有一个程序占用CPU。
  进程的lock_depth成员初始化为-1,在 kerenl/fork.c文件中设置。在它小于0时&(恒为 -1),进程不拥有内核锁;当大于或等于0时,进程得到内核锁。&
1.2 setup_arch()&
  setup_arch()函数做体系相关的初始化工作,函数的定义在arch/arm/kernel/setup.c文件中,主要涉及下列主要函数及代码。&
  setup_processor()&  该函数主要通过&
for (list = &__proc_info_ list & &__proc_info_ list++)
if ((processor_id & list-&cpu_mask) == list-&cpu_val)
  这样一个循环来在.段中寻找匹配的processor_id,processor_id在head_armv.S文件中设置。&
1.2.2 setup_architecture(machine_arch_type)&
  该函数获得体系结构的信息,返回mach-xxx/arch.c 文件中定义的machine结构体的指针,包含以下内容&
MACHINE_START (xxx, &xxx&)
MAINTAINER ("xxx"
BOOT_MEM (xxx, xxx, xxx)
FIXUP (xxx)
MAPIO (xxx)
INITIRQ (xxx)
MACHINE_END
1.2.3内存设置代码&
if (meminfo.nr_banks == 0)
meminfo.nr_banks = 1;
meminfo.bank[0].start = PHYS_OFFSET;
meminfo.bank[0].size = MEM_SIZE;
  meminfo结构表明内存情况,是对物理内存结构meminfo的默认初始化。
  nr_banks指定内存块的数量,bank指定每块内存的范围,PHYS _OFFSET指定某块内存块的开始地址,MEM_SIZE指定某块内存块长度。&PHYS _OFFSET和MEM_SIZE都定义在include/asm-armnommu/arch-XXX/memory.h文件中,其中&PHYS _OFFSET是内存的开始地址,MEM_SIZE就是内存的结束地址。
  这个结构在接下来内存的初始化代码中起重要作用。&
1.2.4 内核内存空间管理&
init_mm.start_code = (unsigned long) &_ 内核代码段开始
init_mm.end_code = (unsigned long) &_ 内核代码段结束
init_mm.end_data = (unsigned long) &_ 内核数据段开始
init_mm.brk = (unsigned long) &_ 内核数据段结束
  每一个任务都有一个mm_struct结构管理其内存空间,init_mm 是内核的mm_struct。
  其中设置成员变量* mmap指向自己, 意味着内核只有一个内存管理结构,设置 pgd=swapper_pg_dir,swapper_pg_dir是内核的页目录,ARM体系结构的内核页目录大小定义为16k。init_mm定义了整个内核的内存空间,内核线程属于内核代码,同样使用内核空间,其访问内存空间的权限与内核一样。&
1.2.5 内存结构初始化
  bootmem_init (&meminfo)函数根据meminfo进行内存结构初始化。
  bootmem_init(&meminfo)函数中调用reserve_node_zero(bootmap_pfn, bootmap_pages) 函数,这个函数的作用是保留一部分内存使之不能被动态分配。
  这些内存块包括:
reserve_bootmem_node(pgdat, __pa(&_stext), &_end - &_stext); /*内核所占用地址空间*/
reserve_bootmem_node(pgdat, bootmap_pfn&&PAGE_SHIFT, bootmap_pages&&PAGE_SHIFT) /*bootmem结构所占用地址空间*/
1.2.6 paging_init(&meminfo, mdesc)&
  创建内核页表,映射所有物理内存和IO空间,对于不同的处理器,该函数差别比较大。
  下面简单描述一下ARM体系结构的存储系统及MMU相关的概念。   在ARM存储系统中,使用内存管理单元(MMU)实现虚拟地址到实际物理地址的映射。
  利用MMU,可把SDRAM的地址完全映射到0x0起始的一片连续地址空间,而把原来占据这片空间的FLASH或者ROM映射到其他不相冲突的存储空间位置。
  例如,FLASH的地址从0x~0x00FFFFFF,而SDRAM的地址范围是0x~0x3lFFFFFF,则可把SDRAM地址映射为0x~0xlFFFFFF,而FLASH的地址可以映射到0x~0x90FFFFFF(此处地址空间为空闲,未被占用)。映射完成后,如果处理器发生异常,假设依然为IRQ中断,PC指针指向0xl8处的地址,而这个时候PC实际上是从位于物理地址的0x处读取指令。
  通过MMU的映射,则可实现程序完全运行在SDRAM之中。在实际的应用中.可能会把两片不连续的物理地址空间分配给SDRAM。而在操作系统中,习惯于把SDRAM的空间连续起来,方便内存管理,且应用程序申请大块的内存时,操作系统内核也可方便地分配。通过MMU可实现不连续的物理地址空间映射为连续的虚拟地址空间。操作系统内核或者一些比较关键的代码,一般是不希望被用户应用程序访问。通过MMU可以控制地址空间的访问权限,从而保护这些代码不被破坏。&
  MMU的实现过程,实际上就是一个查表映射的过程。建立页表是实现MMU功能不可缺少的一步。页表位于系统的内存中,页表的每一项对应于一个虚拟地址到物理地址的映射。每一项的长度即是一个字的长度(在ARM中,一个字的长度被定义为4Bytes)。页表项除完成虚拟地址到物理地址的映射功能之外,还定义了访问权限和缓冲特性等。   MMU的映射分为两种,一级页表的变换和二级页表变换。两者的不同之处就是实现的变换地址空间大小不同。   一级页表变换支持1 M大小的存储空间的映射,而二级可以支持64 kB,4 kB和1 kB大小地址空间的映射。
动态表(页表)的大小=表项数*每个表项所需的位数,即为整个内存空间建立索引表时,需要多大空间存放索引表本身。&表项数=虚拟地址空间/每页大小&每个表项所需的位数=Log(实际页表数)+适当控制位数&实际页表数 =物理地址空间/每页大小
更多详情见请继续阅读下一页的精彩内容:
相关资讯 & & &
& (03/08/:09)
& (04/02/:17)
& (10/25/:03)
& (08/18/:33)
& (10/07/:14)
图片资讯 & & &
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款

我要回帖

更多关于 archlinux安装教程 的文章

 

随机推荐