本页文章导读:
▪archlinux的安装与简单配置(长期更新)
安装部分较为较为简略,详细内容请查看arch的wiki
分区
cfdisk
格式化
mkfs.ext4 /dev/sdaX
...
挂载分区
mount /dev/sdaX /mnt
...
修改软件源
nano /etc/pacman.d/mirrorlist
加上
Server.........
▪windows 7下安装python+mongodb 1. python安装
下载:http://python.org/download/
直接双击安装,安装完后将路径加入系统环境变量path中。
2. mongodb安装
下载:http://www.mongodb.org/downloads
a . 解压下载的安装文件,将其重命名为mongodb.
b.........
▪Linux内核加载全流程 无论是Linux还是Windows,在加电后的第一步都是先运行BIOS(Basic Input/Output System)程序——不知道是不是所以的电脑系统都是如此。BIOS保存在主板上的一个non-volatile(即非易失)存储器,如PROM.........
[1]archlinux的安装与简单配置(长期更新)
安装部分较为较为简略,详细内容请查看arch的wiki
分区
cfdisk
格式化
mkfs.ext4 /dev/sdaX
...
挂载分区
mount /dev/sdaX /mnt
...
修改软件源
nano /etc/pacman.d/mirrorlist
加上
Server = http://mirrors.163.com/archlinux/$repo/os/$arch
安装基本系统
pacstrap /mnt base base-devel
生成fstab
genfstab -U -p /mnt >> /mnt/etc/fstab
x86_64下一些32位的库
开启[multilib]
文件/etc/pacman.conf取消multilib的注释
安装X
Xorg包, mesa(3D),
pacman -S xorg-server xorg-xinit xorg-utils xorg-server-utils mesa
驱动
intel开源驱动,32位lib
pacman -S xf86-video-intel lib32-intel-dri
触摸板驱动
pacman -S xf86-input-synaptics
测试环境
pacman -S xorg-twm xorg-xclock xterm
启动X
startx
[2]windows 7下安装python+mongodb
1. python安装
下载:http://python.org/download/
直接双击安装,安装完后将路径加入系统环境变量path中。
2. mongodb安装
下载:http://www.mongodb.org/downloads
a . 解压下载的安装文件,将其重命名为mongodb.
b. 打开命令提示符,进入解压出来的mongodb目录中,
如: cd d:\mongodb
c. 配置环境变量,将bin目录加入系统环境变量path中.
d. 建立数据文件夹,mongodb默认的数据文件夹是c:\data\db,如果不想使用该路径,可以指定dbpath
// 建立数据文件夹
md data
md data\db
// 运行mongod.exe
mongod.exe --dbpath d:\mongodb\data\db
e. 启动mongodb
重新打开一个命令提示符窗口,执行下面命令
mongo.exe
回车后进入mongodb shell 命令窗口.
f. 将MongoDB加入window service
// 建立日志文件夹
md log
// 创建配置文件
echo logpath=d:\mongodb\log\mongo.log > d:\mongodb\mongod.cfg
// 安装MongoDBfuwu
mongod.exe --dbpath d:\mongodb\data\db --config d:\mongodb\mongod.cfg --install
// start MongoDB service
net start MongoDB
// stop MongoDB service
net stop MongoDB
3. 安装pymongo(python driver for MongoDB)
下载:https://pypi.python.org/pypi/pymongo/
我下载的是:pymongo-2.5.2.win32-py2.7.exe
直接双击安装,系统会自动找出python的安装路径,如果没有,请选择其他版本进行安装
手册:http://api.mongodb.org/python/current/tutorial.html
作者:sonickonka 发表于2013-8-2 9:19:44 原文链接
阅读:217 评论:0 查看评论
[3]Linux内核加载全流程
无论是Linux还是Windows,在加电后的第一步都是先运行BIOS(Basic Input/Output System)程序——不知道是不是所以的电脑系统都是如此。BIOS保存在主板上的一个non-volatile(即非易失)存储器,如PROM,EPROM,Flash等。——以前的BIOS一般都是只读的,现代的系统中,允许刷新BIOS程序。它的任务就是简单的初始化和识别系统硬件设备,如CPU,内存,输入/输出设备,外部存储设备等。然后找到bootloader的位置,并加载bootloader,将PC的控制权交给bootloader,完成后面的复杂的系统初始化任务。
但是在系统启动之前,系统如何启动BIOS呢?所以系统启动的过程,也被称为自举。虽然没有“先有鸡还是先有蛋”那么复杂,但是这里也有一个矛盾。PC是这样解决这个问题的。将CPU设计成加电以后,就从一个特殊的固定的地址开始执行指令,那么BIOS的位置就放在这里,也就是存储BIOS的ROM的起始地址就是这个固定的地址,用以保证BIOS程序可以在加电时被直接执行。
这里有两个问题:
1. BIOS的存储器地址如何决定的?
2. 现在多处理器的情况下,BIOS是如何执行的?
下面以Intel CPU为例,简单说明一下流程:
Intel在初始化的时候将CPU分为两类,即BSP(Bootstrap Processor)与APs(Application Processors)。从名字上既可看出两类CPU的作用。在启动的时候,首先由硬件动态选择一个总线上的CPU为BSP,那么剩下的CPU则都为AP。由BSP执行BIOS程序,初始化环境以及APs,然后还是有BSP执行操作系统的初始化代码。Intel
CPU的第一条语句的固定地址为0xFFFF FFF0,然后BIOS的存储器被hard-map到这个内存地址。这样当CPU开始执行时,实际上执行的就是BIOS程序。
由于BIOS的存储器不会太大,所以程序一般不会太复杂,那么不大可能实现加载操作系统的操作,只能完成简单的初始化工作。这时,只能借助于外部存储器了。可是外部存储器的读取是依赖于文件系统的。而BIOS程序既然比较简单,那么是不可能去支持文件系统的,更何况有各种各样的文件系统,不可能去一一支持。这时,还是只能依赖于硬编码,必须定义一个固定的外部存储器的地址——硬盘的第一个扇区的512字节——被称为MBR(Master
Boot Record)——为什么是512字节呢?按照我的理解,一般情况下一个扇区都被设置为512字节,而硬盘操作的最小单元即为一个扇区。虽然可以设置更大的扇区,但是作为一个统一的程序来说,使用惯例512是一个不错的选择。
BIOS的最后一项任务就是将MBR读入到内存中,且起始地址固定为0x7c00,然后对MBR的最后两个字节进行验证,必须为0x55和0xAA,以保证这512字节为MBR。验证通过后,则跳转到0x7c00处开始执行。这样MBR就开始执行。——这里,我有两个问题,为什么是7c00和0x55和0xAA呢?目前没有找到当初选择这两个值的解释。我依稀记得选择0x55,0xaa是因为这个值比较特殊,利于校验,但是为什么利于校验却不记得了。
MBR保存了分区表(MBR并不存在于任何一个分区中,而是处于分区之上),以及一个用于装载操作系统启动程序的小程序。MBR首先会确定活动分区,然后使用BIOS将这个活动分区的启动扇区——仍然是第一个扇区512字节,最后跳转到加载该启动扇区的内存地址处。这样就将PC的控制器转移到这个启动扇区的程序手中(即真正的bootloader)。一般来说,这个启动程序也要求被加载到0x7c00这个地址。可是这个地址之前已经加载了MBR,如果再加载这个启动程序,那么必然冲突。所以MBR实际上在开始的时候,先对自己做了relocate,将自己拷贝到另外一个地址,然后从那个地址开始执行,这样就避免了冲突。
下面就进入了真正的bootloader了,对于Linux来说,一般就是LILO和GRUB,下面以最常用的GRUB为例。
GRUB的启动分为三个阶段stage1,stage1.5和stage2,这三个阶段也被分为三个文件(在某些情况下,可以没有stage1和stage1.5)。其中stage1可以嵌入到MBR中,即MBR的头446个字节(后面为分区表64字节,0x55和0xAA两个校验字节),也可以存储在活动分区的第一个扇区512字节,然后由MBR来加载。所以stage1最多为512字节,如果存储在MBR中,则只能最大为446字节。stage1中保存了stage1.5的地址,并负责加载stage1.5的前512字节。之所以stage1只能加载512字节,是为了遵循MBR的规则。
进入stage1.5,由于只加载了前512字节,所以stage1.5首先要负责把剩余部分代码,由自己加载到内存中。对于stage1.5来说,它可以识别和支持文件系统。可以查看/boot/grub目录下,有多个后缀为stage1.5文件,其前缀即为支持的文件系统,也就是说要支持一个文件系统,就有一个对应的stage1.5文件。至于加载哪个文件,已经硬编码在stage1中。这个文件系统为stage2所在的文件系统。stage2文件是真正保存在文件系统中的。这样通过对应的stage1.5文件,就可以正确加载stage2文件。为什么会有stage1.5这个阶段呢?主要是当stage2不连续或者需要在stage2前,对文件系统做些特殊处理。如果没有这样的需求,完全可以避免stage1.5。
stage2文件为最主要的加载代码,这时由于已经stage1.5已经支持文件系统了,所以stage2可以比较大。stage2来实现GRUB的各种功能,这里就不列举了,感兴趣的同学可以自己查看GRUB的手册。stage2首先需要找到GRUB的配置文件,来决定如何加载操作系统。对于GRUB的配置与本文的主题联系并不紧密,我个人也对其兴趣不大。
GRUB不仅要复杂加载kernel,还要负责加载Initial Ram Disk,又被成为initrd。其目的主要是为了保证一个小体积的内核。initrd为一个简单的文件系统,它包含了一些内核必要的文件和模块。这样,首先将initrd挂载为一个根系统,然后kernel利用这个基本的系统,来检测环境,加载更多的必要的模块。在完成所有的加载后,这时kernel已经完全准备就绪。那么initrd对于kernel来说,已经不需要了。这时,kernel会将initrd从根/上卸载,并挂载上真正的根系统,并执行正常的启动程序。
作者:Embeddedfly 发表于2013-8-3 14:01:37 原文链接
阅读:20 评论:0 查看评论