分类 Linux 下的文章

vmware虚拟硬盘空间增大操作方法

VMware虚拟磁盘管理工具是VMware Workstation软件包里的一个软件,它让你用命令行或通过脚本来创建管理修改虚
拟磁盘文件。它的一个重要的特性是能够增大虚拟磁盘大小,使虚拟磁盘的最大尺寸比刚创建时(定义的)更大。它
是这样一种方法,如果你需要更多的磁盘空间在已经定义的虚拟机中,而你又不想添加另外一块硬盘或者用Ghost软
件来传递虚拟磁盘上的数据到另外一块更大的虚拟磁盘上去时,你可以用改变虚拟磁盘最大尺寸方法来做。不过你可
不能用这种方法对你的物理硬盘实施。
 

   另外一个功能是让你能够改变虚拟磁盘的类型。当你创建虚拟机时,你定义了虚拟磁盘空间的分配方式。你可以
在以下选择一种分配方式:
 

- 所有的虚拟磁盘空间预分配。它相当于虚拟磁盘管理工具所说的预分配磁盘类型。
 

- 虚拟磁盘在开始时最小随着数据的增加而变大。它相当于虚拟磁盘管理工具所说的可增长磁盘类型。
使用虚拟磁盘管理工具,你能够更改虚拟磁盘的类型为预分配或可增长的、单个文件储存或每个文件大小为2GB的多
文件方式。举个例子,你可以分配所有的虚拟磁盘空间,然后发现你需要收回一些主机上的硬盘空间。你能转换预分
配的虚拟磁盘为可增长的虚拟磁盘,然后删除原来的那个虚拟磁盘文件。(这样)虚拟磁盘的大小将随着你的数据的
增长而增长。
这些功能和使用脚本自动管理虚拟磁盘方法在VMware Workstation5.0版本中提供。
 

 你能够用虚拟磁盘管理工具完成以下任务:
 

- 使用脚本自动管理虚拟磁盘。
 

- 创建虚拟磁盘而不和任何一个虚拟机关联,举个例子,创建它作为样板。
 

- 在预分配和可增长的虚拟磁盘类型间进行转换。当你更改为可增长的虚拟磁盘类型,你就能够收回一些磁盘空间
。你也能通过收缩虚拟磁盘来收回更多的空间。
 

- 增大虚拟磁盘的尺寸,使它比你创建时定义的尺寸更大。
 

- 磁盘碎片整理虚拟磁盘。
 

- 准备和收缩虚拟磁盘而不需要开启虚拟机进行(仅适用于Windows宿主机)。
你可以用虚拟磁盘管理程序管理由VMware GSX Server, VMware Workstation and VMware VirtualCenter(由GSX 

Server提供被VirtualCenter管理的虚拟磁盘)创建的虚拟磁盘。
 

 注意:你不能用虚拟磁盘工具创建物理磁盘。物理磁盘不能被虚拟磁盘管理工具或Workstation软件收缩。
 

 更多关于使用虚拟磁盘工具的信息,请阅读以下章节:
 

- 使用虚拟磁盘管理软件
 

- 使用虚拟磁盘管理实例
使用虚拟磁盘管理软件
 

   打开宿主机中的命令行或终端(Linux中的命令行),以运行虚拟磁盘管理软件。在Windows宿主机中,更改目录
为你安装Workstation软件所在的目录。默认的安装目录为C:\Program Files\VMware\VMware Workstation。
 

 命令语法:
 

   vmware-vdiskmanager [选项]
 

 这里的选项你必须包含以下的一些选择项或参数
 

 选项和参数
 

 描述
<diskname> 

 

   虚拟磁盘文件的名字。虚拟磁盘文件必须是.vmdk为扩展名。你能够指定一个你想要储存的虚拟磁盘文件的路径
。如果你在你的宿主机中映射了网络共享,你也可以提供确切的虚拟磁盘文件的路径信息来创建虚拟磁盘在这个网络
共享中
-c
 

   创建虚拟磁盘。你必须用-a, -s 和 -t 并指定选项参数,然后你需要指定所要创建的虚拟磁盘文件的文件名。
-r <sourcediskname>
 

   转换已经指定类型的虚拟磁盘的类型,结果会输出创建一个新的虚拟磁盘。你必须用-t选项来指定你想要转换成
的磁盘类型,并且指定目标虚拟磁盘的文件名。
 

   一旦转换完成,你可以先测试虚拟磁盘以确保它能够像你所希望的那样工作,然后再删除原来的那个虚拟磁盘文
件。
 

   为了让虚拟机重新认识转换后的虚拟磁盘,你应该使用虚拟机设置编辑器先从虚拟机中移除先前存在的虚拟磁盘
,然后添加转换好的虚拟磁盘给虚拟机。
-x <n>[GB|MB] <diskname>
 

   增大虚拟磁盘到指定的容量。你必须指定新的更大尺寸的虚拟磁盘用GB或MB单位标示。你不能改变物理磁盘的大
小。(废话)
 

 注意:在你运行虚拟磁盘管理软件前,你应该先备份虚拟磁盘文件。(因为不会创建新的文件,所以备份以防增大
磁盘操作失败)
-d <diskname> 

 

   对指定的虚拟磁盘碎片整理。你只能磁盘碎片整理可增长的虚拟磁盘。你不能磁盘碎片整理预分配的虚拟磁盘。
-p <mountpoint> 

 

   为收缩磁盘做准备处理。如果虚拟磁盘被分成多个分区,每个分区必须被单独准备。分区(比如C:或D:)必须
用VMware DiskMount工具映射。更多的应用VMware DiskMount映射和解除虚拟磁盘的映射的内容,请看VMware 

DiskMount用户手册,可以在VMware站点中http://www.vmware.com/pdf/VMwareDiskMount.pdf  

下载到。VMware 
DiskMount免费软件也可以在http://www.vmware.com/download/ws/  

页面下载到。
 

   在你对分区准备处理后,解除对此分区的映射。继续映射虚拟磁盘的其他每个分区,为收缩磁盘作准备处理直到
完成虚拟磁盘上的所有分区的准备工作。
 

   你在同一时刻只能用VMware DiskMount映射虚拟磁盘的一个分区。你仅仅能在Windows宿主机上进行虚拟磁盘的
收缩分区准备工作。
-k <diskname> 

 

   收缩指定的虚拟磁盘。你只能够收缩可增长磁盘。你只能在Windows宿主机中(用这种方法)收缩虚拟磁盘。
 

   你不能够收缩有虚拟机快照的虚拟磁盘。你可以保持现有虚拟磁盘的状态,而用快照管理器删除所有快照。你也
可以放弃自快照以来对虚拟磁盘所做的更改,恢复到快照时状态。
-a [ ide | buslogic | lsilogic ]
 

   指定磁盘适配器的类型。你在创建新的虚拟磁盘时必须指定其类型。选择以下类型之一:
 

   ide —— IDE接口适配器
 

   buslogic —— BusLogic SCSI接口适配器
 

   lsilogic —— LSI Logic SCSI接口适配器
-s <n> [GB|MB] 

 

   指定虚拟磁盘的大小。确定大小用GB或MB做单位。你必须在创建磁盘时指定其大小。
 

   尽管你必须指定虚拟磁盘的大小,但当你增长它的大小时,你不能用-s这个选项。
 

   可以指定的磁盘大小规定:IDE和SCSI适配器都为最小100MB,最大950GB。
-t [0|1|2|3] 

 

   你在创建一个新的虚拟磁盘或者重新配置一个虚拟磁盘时必须指定虚拟磁盘的类型。指定以下类型之一:
 

   0 —— 创建一个包含在单一虚拟文件中的可增长虚拟磁盘
 

   1 —— 创建一个被分割为每个文件2GB大小的可增长虚拟磁盘
 

   2 —— 创建一个包含在单一虚拟文件中的预分配虚拟磁盘
 

   3 —— 创建一个被分割为每个文件2GB大小的预分配虚拟磁盘
-q 

 

   禁止虚拟磁盘管理程序写日志
 

   如果你允许记录日志,日志将会被虚拟磁盘管理程序产生并储存。在虚拟磁盘管理程序运行后,日志的名字和存
放位置将会出现在命令行或终端中。
-n <source-disk>
 

   重命名指定的虚拟磁盘。需要指定命名后的虚拟磁盘名字。
使用VMware虚拟磁盘管理工具实例
 

   以下例子描述怎样使用虚拟磁盘管理工具。你需要在命令行中运行虚拟磁盘管理工具。
创建虚拟磁盘
 

   命令:vmware-vdiskmanager -c -t 0 -s 40GB -a ide myDisk.vmdk
 

   这个命令将创建一个40GB大小IDE接口的名字为myDisk的虚拟硬盘。虚拟磁盘包含在一个单一文件中。这个虚拟
磁盘没有被预分配磁盘空间。
 

 实际命令输入:
 

   D:\Big Program Files\VMware\VMware Workstation>vmware-vdiskmanager -c -s 40Gb –a  ide -t 0 
E:\myDisk.vmdk
 

 执行结果显示:
 

   Using log file C:\DOCUME~1\AnEgg\LOCALS~1\Temp\vmware-AnEgg\vdiskmanager.log
 

   Creating a monolithic growable disk 'E:\myDisk.vmdk'
 

   Virtual disk creation successful.
转换一个虚拟磁盘
 

   转换一个预分配虚拟磁盘为可增长虚拟磁盘,用以下这个命令:
 

     vmware-vdiskmanager -r sourceDisk.vmdk -t 0 targetDisk.vmdk
 

   这个命令将转换磁盘从它的原始的预分配模式转变为包含在单一文件中的可增长虚拟磁盘。这个虚拟磁盘空间将
不会被预先分配,虚拟磁盘工具将收回虚拟磁盘中的一些磁盘空间,而仅仅让里面的数据占用虚拟磁盘空间。
 

 实际命令输入:
 

   D:\Big Program Files\VMware\VMware Workstation>vmware-vdiskmanager -r "D:\WinXP
 

   SP2 V2.5\Windows XP Professional.vmdk" -t 0 "L:\Windows XP Professional.vmdk"
 

 执行结果显示:
 

   Using log file C:\DOCUME~1\AnEgg\LOCALS~1\Temp\vmware-AnEgg\vdiskmanager.log
 

   Creating a monolithic growable disk 'L:\Windows XP Professional.vmdk'
 

   Convert: 100% done.
 

   Virtual disk conversion successful.
增大存在的虚拟磁盘的大小
 

   命令:vmware-vdiskmanager -x 40GB myDisk.vmdk
 

   这条命令将把虚拟磁盘myDisk.vmdk大小增大到40GB
 

 实际命令输入:
 

   D:\Big Program Files\VMware\VMware Workstation>vmware-vdiskmanager -x 40GB "D:\WinXP SP2 V2.5
\Windows XP Professional S.vmdk"
 

 执行结果显示:
 

   Using log file C:\DOCUME~1\AnEgg\LOCALS~1\Temp\vmware-AnEgg\vdiskmanager.log
 

   Grow: 100% done.
 

   The old geometry C/H/S of the disk is: 8322/16/63
 

   The new geometry C/H/S of the disk is: 16383/16/63
 

   Disk expansion completed successfully.
 

   WARNING: If the virtual disk is partitioned, you must use a third-party
 

            utility in the virtual machine to expand the size of the
 

            partitions. For more information, see:
 

            http://www.vmware.com/support/kb/enduser/std_adp.php?p_faqid=1647 
 

   创建好后,可以在磁盘管理中,看到未指派的空间。如果你想扩大磁盘分区的大小,可以用其他第三方软件来做
举例用第三方磁盘管理软件PartitionMagic来调整分区大小
原始磁盘
进入调整向导
经过设置后的调整方案 

应用方案后的结果 

主磁盘C空间从4GB变为了10GB。
重命名虚拟磁盘
 

   重命名虚拟磁盘,首先把虚拟磁盘从虚拟机中移除。(选择 虚拟机 )设置 〉虚拟磁盘,然点移除按钮)
 

   然后重命名命令:vmware-vdiskmanager -n myDisk.vmdk myNewDisk.vmdk
 

   重命名磁盘定位在不同的目录下的命令:
 

     vmware-vdiskmanager -n myDisk.vmdk ..\<new-path>\myNewDisk.vmdk
 

 注意:这是一个在windows宿主机中的路径方式。
 

   定位在不同目录下,但保持相同名字的虚拟磁盘命令:
 

     vmware-vdiskmanager -n myDisk.vmdk ..\<new-path>\myDisk.vmdk
 

   在你重命名或重定位虚拟磁盘后,把虚拟磁盘添加回虚拟机中使用。选择 虚拟机 〉设置,点添加,然后根据向
导添加这个已经存在的虚拟磁盘。
 

 实际命令输入:
 

   D:\Big Program Files\VMware\VMware Workstation>vmware-vdiskmanager -n "D:\WinXP SP2 V2.5\Windows 
XP Professional S.vmdk" "D:\WinXP SP2 V2.5\Windows XP Professio nal WS.vmdk"
 

 执行结果显示:
 

   Using log file C:\DOCUME~1\AnEgg\LOCALS~1\Temp\vmware-AnEgg\vdiskmanager.log
 

   Renaming completed successfully.
 

   重命名几乎是瞬间完成的,虽然如此,不过我用MD5验证前后的.vmdk文件,证实文件确实经过了内部修改,得到
了不同的MD5码。
磁盘碎片整理虚拟磁盘
 

   命令:vmware-vdiskmanager -d myDisk.vmdk
 

   记住,你不能磁盘碎片整理预分配的虚拟磁盘。你也不能用这条命令磁盘碎片整理物理硬盘。(废话)
 

 实际命令输入:
 

   D:\Big Program Files\VMware\VMware Workstation>vmware-vdiskmanager -d "D:\WinXP SP2 V2.5\Windows 
XP Professional S.vmdk"
 

 执行结果显示:
 

   Using log file C:\DOCUME~1\AnEgg\LOCALS~1\Temp\vmware-AnEgg\vdiskmanager.log
 

   Defragment: 100% done.
 

   Defragmentation completed successfully.
为收缩虚拟磁盘做准备
 

   命令:vmware-vdiskmanager –p S:
 

   一旦准备完成,解除分区映射。重复这个过程在虚拟磁盘的每个分区上。(这样可以得到最好的收缩效果)在你
为收缩磁盘准备好了所有分区后,你就可以收缩虚拟磁盘了
 

 实际命令输入:
 

   D:\Big Program Files\VMware\VMware Workstation>vmware-vdiskmanager -p S:
 

 执行结果显示:
 

   Using log file C:\DOCUME~1\AnEgg\LOCALS~1\Temp\vmware-AnEgg\vdiskmanager.log
 

   100% wiping done.
我所映射的虚拟磁盘S
收缩虚拟磁盘
 

  (这种方法)收缩虚拟磁盘必须在Windows宿主机下进行。在你收缩虚拟磁盘以前,确保你已经为虚拟磁盘的所有
分区进行了收缩准备。
 

   命令:vmware-vdiskmanager -k myDisk.vmdk
 

   记住,你不能收缩预分配的磁盘。你也不能收缩物理磁盘。如果虚拟磁盘有快照,你也不能收缩。在你收缩以前
删除所有的快照。
 

 实际命令输入:
 

   D:\Big Program Files\VMware\VMware Workstation>vmware-vdiskmanager -k "D:\WinXP SP2 V2.5\Windows 
XP Professional S.vmdk"
 

 执行结果显示:
 

   Using log file C:\DOCUME~1\AnEgg\LOCALS~1\Temp\vmware-AnEgg\vdiskmanager.log
 

   Shrink: 100% done.
 

   Shrink completed successfully.
 

 收缩磁盘时会产生一个临时文件,其实它就是收缩后的虚拟磁盘文件,会代替原来的那个虚拟磁盘文件。
(以上操作我都尝试过,并在虚拟机中验证可行,虚拟机和虚拟磁盘运行并没有受到任何的影响。)
附上命令行中的虚拟磁盘管理工具的帮助

裁减、配置和移植Linux内核到s3c2440开发板

一、准备工作(使用tar xjvf命令解压linux-2.6.22.6.tar.bz2后,cd /work/system/linux-2.6.22.6)1、修改顶层Makefile的185和186行,以指定特定CPU体系结构和交叉编译工具。

185 ARCH 

           ?= arm

186 CROSS_COMPILE 

  ?= arm-linux-

2、内核配置选项有几百个,配置者不可能一一配置,因此先输入make s3c2410_defconfig,以使用标准模板的配置

dennis@dennis-desktop:/work/system/linux-2.6.22.6$ make s3c2410_defconfig

3、使用make menuconfig进入图形配置界面,浏览基本配置

image

单击System Type ---- S3C2440 Machines

image

SMDK2440和SMDK2440 with S3C2440 CPU module已被选择(方括弧内有*号),表明编译出来的内核将支持由S3C2440组成的开发板

4、保存退出后,输入make zImage,大约半小时后将在arch/arm/boot目录生成内核文件zImage

5、将制作uImage的程序mkimage(位于编译后的u-boot源代码目录的tools子目录中)拷贝到/usr/bin目录

sudo 

    cp     /work/system/u-boot-1.1.6/tools/mkimage     /usr/bin/

6、输入make uImage后,内核构造系统将调用mkimage,通过zImage生成uImage(位于arch/arm/boot目录)。uImage是可供u-boot引导的linux内核,它在zImage前增加了64byte的头(这64byte的头有什么作用、里面包含什么内容,请参见“深入剖析u-boot”一文)

dennis@dennis-desktop:/work/system/linux-2.6.22.6$ ls -l arch/arm/boot/[uz]Image
-rw-r--r-- 1 dennis dennis 1511140 2010-04-01 10:43 arch/arm/boot/uImage
-rwxr-xr-x 1 dennis dennis 1511076 2010-04-01 10:41 arch/arm/boot/zImage

7、将uImage烧写到开发板的nand flash上

1)、使用网线将开发板与Linux机器物理连通

2)、配置Linux机器的ip地址为192.168.2.11

3)、配置开发板的ip地址为192.168.2.17

Dennis Yang > setenv ipaddr 192.168.2.17
Dennis Yang > saveenv
Saving Environment to NAND...
Erasing Nand...Writing to Nand... done

4)、确认开发板能与Linux机器通信

Dennis Yang > ping 192.168.2.11
host 192.168.2.11 is alive

5)、配置Linux机器上NFS服务器的配置文件/etc/exports,使NFS服务器共享/work/system/linux-2.6.22.6目录

/work/system/linux-2.6.22.6 

         *(rw,sync,no_root_squash)

后,重启NFS服务

sudo 

   /etc/init.d/nfs-kernel-server     restart

6)、将uImage下载到开发板RAM地址0x32000000处

Dennis Yang > nfs 0x32000000 192.168.2.11:/work/system/linux-2.6.22.6/arch/arm/boot/uImage

7)格式化nand flash某区段(起始地址为0x80000,长度为0x180000字节),并将位于RAM地址0x32000000的uImage烧写到该区段

Dennis Yang > nand erase 0x80000 0x180000

Dennis Yang > nand write.jffs2 0x32000000 0x80000 0x180000

8)、启动Linux。可以看到内核正确并被启动,但旋即输出乱码。这说明需要对Linux进行移植(修改源代码)

Dennis Yang > boot

NAND read: device 0 offset 0x80000, size 0x180000

Reading data from 0x1ffe00 -- 100% complete.
1572864 bytes read: OK
## Booting image at 32000000 ...

  Image Name:   Linux-2.6.22.6   Created:      2010-04-01   2:43:59 UTC   Image Type:   ARM Linux Kernel Image (uncompressed)   Data Size:    1511076 Bytes =  1.4 MB   Load Address: 30008000   Entry Point:  30008000   Verifying Checksum ... OK OK

Starting kernel ...

Uncompressing Linux................................................................................................... done, booting the kernel.
鯸竾"骾7记浄77 悄3:癖;?虡?蘬儳{€$剜#"8€4梧f凣郻凣?f癎C?吾G4鞇`[

二、为S3C2440移植内核

1、修改晶振频率

S3C2440支持2种晶振频率:12MHZ和16MHZ。qq2440v3开发板使用的是12M的晶振,而内核源代码则采用的是16M频率,从而产生了错误的PCLK,因此导致内核向串口输出数据时使用了错误的波特率(正确的应是115200),这样在超级终端中看到的就是乱码。因此我们只需修改内核源代码中的晶振频率即可。

将arch/arm/mach-s3c2440/mach-smdk2440.c的第180行

s3c24xx_init_clocks(16934400);

改为:

s3c24xx_init_clocks(12000000);

2、修改nand flash分区表

这次内核正常启动,不再出现乱码,但未能成功挂载根文件系统。出现错误如下:

VFS: Mounted root (jffs2 filesystem).
Freeing init memory: 132K
Warning: unable to open an initial console.
Kernel panic - not syncing: No init found. 

 Try passing init= option to kernel.

仔细查看内核出错前的输出,发现内核在nand flash上创建了8个分区:

Creating 8 MTD partitions on "NAND 64MiB 3,3V 8-bit":
0x00000000-0x00004000 : "Boot Agent"
0x00000000-0x00200000 : "S3C2410 flash partition 1"
0x00400000-0x00800000 : "S3C2410 flash partition 2"
0x00800000-0x00a00000 : "S3C2410 flash partition 3"
0x00a00000-0x00e00000 : "S3C2410 flash partition 4"
0x00e00000-0x01800000 : "S3C2410 flash partition 5"
0x01800000-0x03000000 : "S3C2410 flash partition 6"
0x03000000-0x04000000 : "S3C2410 flash partition 7"

而内核从u-boot获得的启动参数(root=/dev/mtdblock2)表明,根文件系统放在nand flash的第3个分区上。

Kernel command line: noinitrd root=/dev/mtdblock2 console=ttySAC0 rootfstype=jffs2

这样一来,内核会到nand flash的0x00400000-0x00800000区间来挂载根文件系统,但事实上我们通过u-boot烧写根文件系统时,是将其烧写在nand flash的0x1200000-0x2200000这个区间的。所以内核不能成功挂载根文件系统。因此,我们必须修改内核对nand flash的分区定义,让第3个分区位于0x1200000-0x2200000这个区间。

修改arch/arm/plat-s3c24xx/common-smdk.c文件,将109-150行改为:

static struct mtd_partition smdk_default_nand_part[] = {

       [0] = {                .name   = "Kernel",                .size   = SZ_2M,                .offset = 0,        },        [1] = {                .name   = "YaffsRoot",                .offset = MTDPART_OFS_APPEND,                .size   = SZ_16M,        },        [2] = {                .name   = "Jffs2Root",                .offset = MTDPART_OFS_APPEND,                .size   = SZ_16M,        },        [3] = {                .name   = "FreePartition",                .offset = MTDPART_OFS_APPEND,                .size   = MTDPART_SIZ_FULL,        } };

三、配置并裁减内核

现在内核虽然可以正常工作,但作为嵌入式操作系统的Linux,是可以被裁减以适应我们的具体需要。下面我们就通过 make menuconfig 对内核进行配置和裁减,使得最终的内核尽量小,并实现支持:

1、nand flash驱动;2、jffs2文件系统 ;3、ELF格式的应用程序;4、串口驱动;5、ram disk(将内存当硬盘使用);6、ext2文件系统;7、环回设备(将物理文件

当硬盘使用、类似windows下的虚拟光驱);8、将目录挂载到内存(将内存当目录使用);9、能识别U盘FAT分区和NTFS分区上的中英文文件;10、更新和获取实时时钟;

11、watchdog驱动;12、I2C驱动;13、SPI驱动;14、framebuffer;

15、TCP/IP协议栈;16、开发板充当NFS客户端;17、将NFS服务器上的共享目录挂载为根文件系统;18、动态加载和卸载模块;19、开发板充当PC机的U盘;20、USB网卡DM9601

不支持:1、网卡驱动;2、声卡驱动

image

Code maturity level options 选中则使未定型的功能组件出现在配置选项中,这样就可以显示更多的配置选项
General setup 杂项设置
Block layer 块设备层:用于设置块设备的一些总体参数,比如是否支持大于2TB的块设备、是否支持大于2TB的文件、设置I/O调度器等。一般使用默认值即可
System Type 系统类型:选择CPU架构、开发板类型等开发板相关的配置选项
Bus support PCMCIA/CardBus总线的支持,不用设置
Kernel Features 用于设置内核的一些参数,比如是否支持内核抢占,是否支持动态修改系统时钟等
Boot options 启动参数:比如设置默认的命令行参数等,一般不用理会
Floating point emuulation 浮点运算仿真功能,目前linux还不支持硬件浮点运算,所以要选择一个浮点仿真器,一般选择“NWFPE math emulation”
Userspace binary formats 可执行文件格式,一般选择ELF
Power management options 电源管理选项
Neteworking 网络协议选项:一般都选择“Networking support”以支持网络功能,选择“Packet socket”,以支持raw socket接口功能,选择“TCP/IP networking”以支持TCP/IP网络协议。通常在选择“Networking support”后使用默认配置
Device Drivers 设备驱动程序:几乎包含Linux的所有驱动程序
File systems 文件系统
profiling support 对系统的活动进行分析,仅供内核开发者使用
Kernel hacking 调试内核时的各种选项
Security options 安全选项,一般使用默认选项
Cryptographic options 加密选项
Library routines 库子程序:比如CRC32检验函数、zlib压缩函数等。不包含在内核源码中的第三方内核模块可能需要这些库,可以全不选,若内核中其它部分依赖它,会自动选上

 

裁减、配置和移植Linux内核到s3c2440开发板

移植、裁减及配置Linux内核到s3c2440开发板
单击,返回主页,查看更多内容
一、准备工作(使用tar xjvf命令解压linux-2.6.22.6.tar.bz2后,cd /work/system/linux-2.6.22.6)
1、修改顶层Makefile的185和186行,以指定特定CPU体系结构和交叉编译工具。
185 ARCH  

          ?= arm
186 CROSS_COMPILE  

 ?= arm-linux-
2、内核配置选项有几百个,配置者不可能一一配置,因此先输入make s3c2410_defconfig,以使用标准模板的配置
dennis@dennis-desktop:/work/system/linux-2.6.22.6$ make s3c2410_defconfig
3、使用make menuconfig进入图形配置界面,浏览基本配置
单击System Type ---- S3C2440 Machines
SMDK2440和SMDK2440 with S3C2440 CPU module已被选择(方括弧内有*号),表明编译出来的内核将支持由S3C2440组成的开发板
4、保存退出后,输入make zImage,大约半小时后将在arch/arm/boot目录生成内核文件zImage
5、将制作uImage的程序mkimage(位于编译后的u-boot源代码目录的tools子目录中)拷贝到/usr/bin目录
sudo  

   cp     /work/system/u-boot-1.1.6/tools/mkimage     /usr/bin/
6、输入make uImage后,内核构造系统将调用mkimage,通过zImage生成uImage(位于arch/arm/boot目录)。uImage是可供u-boot引导的linux内核,它在zImage前增加了64byte的头(这64byte的头有什么作用、里面包含什么内容,请参见“深入剖析u-boot”一文)
dennis@dennis-desktop:/work/system/linux-2.6.22.6$ ls -l arch/arm/boot/[uz]Image
-rw-r--r-- 1 dennis dennis 1511140 2010-04-01 10:43 arch/arm/boot/uImage
-rwxr-xr-x 1 dennis dennis 1511076 2010-04-01 10:41 arch/arm/boot/zImage
7、将uImage烧写到开发板的nand flash上
1)、使用网线将开发板与Linux机器物理连通
2)、配置Linux机器的ip地址为192.168.2.11
3)、配置开发板的ip地址为192.168.2.17
Dennis Yang > setenv ipaddr 192.168.2.17
Dennis Yang > saveenv
Saving Environment to NAND...
Erasing Nand...Writing to Nand... done
4)、确认开发板能与Linux机器通信
Dennis Yang > ping 192.168.2.11
host 192.168.2.11 is alive
5)、配置Linux机器上NFS服务器的配置文件/etc/exports,使NFS服务器共享/work/system/linux-2.6.22.6目录
/work/system/linux-2.6.22.6  

        *(rw,sync,no_root_squash)
后,重启NFS服务
sudo  

  /etc/init.d/nfs-kernel-server     restart
6)、将uImage下载到开发板RAM地址0x32000000处
Dennis Yang > nfs 0x32000000 192.168.2.11:/work/system/linux-2.6.22.6/arch/arm/boot/uImage
7)格式化nand flash某区段(起始地址为0x80000,长度为0x180000字节),并将位于RAM地址0x32000000的uImage烧写到该区段
Dennis Yang > nand erase 0x80000 0x180000
Dennis Yang > nand write.jffs2 0x32000000 0x80000 0x180000
8)、启动Linux。可以看到内核正确并被启动,但旋即输出乱码。这说明需要对Linux进行移植(修改源代码)
Dennis Yang > boot
NAND read: device 0 offset 0x80000, size 0x180000
Reading data from 0x1ffe00 -- 100% complete.
1572864 bytes read: OK
## Booting image at 32000000 ...
 

  Image Name:   Linux-2.6.22.6
 

  Created:      2010-04-01   2:43:59 UTC
 

  Image Type:   ARM Linux Kernel Image (uncompressed)
 

  Data Size:    1511076 Bytes =  1.4 MB
 

  Load Address: 30008000
 

  Entry Point:  30008000
 

  Verifying Checksum ... OK
OK
Starting kernel ...
Uncompressing Linux................................................................................................... done, booting the kernel.
二、为S3C2440移植内核
1、修改晶振频率
S3C2440支持2种晶振频率:12MHZ和16MHZ。qq2440v3开发板使用的是12M的晶振,而内核源代码则采用的是16M频率,从而产生了错误的PCLK,因此导致内核向串口输出数据时使用了错误的波特率(正确的应是115200),这样在超级终端中看到的就是乱码。因此我们只需修改内核源代码中的晶振频率即可。
将arch/arm/mach-s3c2440/mach-smdk2440.c的第180行
s3c24xx_init_clocks(16934400);
改为:
s3c24xx_init_clocks(12000000);
2、修改nand flash分区表
这次内核正常启动,不再出现乱码,但未能成功挂载根文件系统。出现错误如下:
VFS: Mounted root (jffs2 filesystem).
Freeing init memory: 132K
Warning: unable to open an initial console.
Kernel panic - not syncing: No init found.  

Try passing init= option to kernel.
仔细查看内核出错前的输出,发现内核在nand flash上创建了8个分区:
Creating 8 MTD partitions on "NAND 64MiB 3,3V 8-bit":
0x00000000-0x00004000 : "Boot Agent"
0x00000000-0x00200000 : "S3C2410 flash partition 1"
0x00400000-0x00800000 : "S3C2410 flash partition 2"
0x00800000-0x00a00000 : "S3C2410 flash partition 3"
0x00a00000-0x00e00000 : "S3C2410 flash partition 4"
0x00e00000-0x01800000 : "S3C2410 flash partition 5"
0x01800000-0x03000000 : "S3C2410 flash partition 6"
0x03000000-0x04000000 : "S3C2410 flash partition 7"
而内核从u-boot获得的启动参数(root=/dev/mtdblock2)表明,根文件系统放在nand flash的第3个分区上。
Kernel command line: noinitrd root=/dev/mtdblock2 console=ttySAC0 rootfstype=jffs2
这样一来,内核会到nand flash的0x00400000-0x00800000区间来挂载根文件系统,但事实上我们通过u-boot烧写根文件系统时,是将其烧写在nand flash的0x1200000-0x2200000这个区间的。所以内核不能成功挂载根文件系统。因此,我们必须修改内核对nand flash的分区定义,让第3个分区位于0x1200000-0x2200000这个区间。
修改arch/arm/plat-s3c24xx/common-smdk.c文件,将109-150行改为:
static struct mtd_partition smdk_default_nand_part[] = {
 

       [0] = {
 

               .name   = "Kernel",
 

               .size   = SZ_2M,
 

               .offset = 0,
 

       },
 

       [1] = {
 

               .name   = "YaffsRoot",
 

               .offset = MTDPART_OFS_APPEND,
 

               .size   = SZ_16M,
 

       },
 

       [2] = {
 

               .name   = "Jffs2Root",
 

               .offset = MTDPART_OFS_APPEND,
 

               .size   = SZ_16M,
 

       },
 

       [3] = {
 

               .name   = "FreePartition",
 

               .offset = MTDPART_OFS_APPEND,
 

               .size   = MTDPART_SIZ_FULL,
 

       }
};
三、配置并裁减内核
现在内核虽然可以正常工作,但作为嵌入式操作系统的Linux,是可以被裁减以适应我们的具体需要。下面我们就通过 make menuconfig 对内核进行配置和裁减,使得最终的内核尽量小,并实现支持:
1、nand flash驱动;2、jffs2文件系统 ;3、ELF格式的应用程序;4、串口驱动;5、ram disk(将内存当硬盘使用);6、ext2文件系统;7、环回设备(将物理文件
当硬盘使用、类似windows下的虚拟光驱);8、将目录挂载到内存(将内存当目录使用);9、能识别U盘FAT分区和NTFS分区上的中英文文件;10、更新和获取实时时钟;
11、watchdog驱动;12、I2C驱动;13、SPI驱动;14、framebuffer;
15、TCP/IP协议栈;16、开发板充当NFS客户端;17、将NFS服务器上的共享目录挂载为根文件系统;18、动态加载和卸载模块;19、开发板充当PC机的U盘;20、USB网卡DM9601
不支持:1、网卡驱动;2、声卡驱动
Code maturity level options 选中则使未定型的功能组件出现在配置选项中,这样就可以显示更多的配置选项
General setup 杂项设置
Block layer 块设备层:用于设置块设备的一些总体参数,比如是否支持大于2TB的块设备、是否支持大于2TB的文件、设置I/O调度器等。一般使用默认值即可
System Type 系统类型:选择CPU架构、开发板类型等开发板相关的配置选项
Bus support PCMCIA/CardBus总线的支持,不用设置
Kernel Features 用于设置内核的一些参数,比如是否支持内核抢占,是否支持动态修改系统时钟等
Boot options 启动参数:比如设置默认的命令行参数等,一般不用理会
Floating point emuulation 浮点运算仿真功能,目前linux还不支持硬件浮点运算,所以要选择一个浮点仿真器,一般选择“NWFPE math emulation”
Userspace binary formats 可执行文件格式,一般选择ELF
Power management options 电源管理选项
Neteworking 网络协议选项:一般都选择“Networking support”以支持网络功能,选择“Packet socket”,以支持raw socket接口功能,选择“TCP/IP networking”以支持TCP/IP网络协议。通常在选择“Networking support”后使用默认配置
Device Drivers 设备驱动程序:几乎包含Linux的所有驱动程序
File systems 文件系统
profiling support 对系统的活动进行分析,仅供内核开发者使用
Kernel hacking 调试内核时的各种选项
Security options 安全选项,一般使用默认选项
Cryptographic options 加密选项
Library routines 库子程序:比如CRC32检验函数、zlib压缩函数等。不包含在内核源码中的第三方内核模块可能需要这些库,可以全不选,若内核中其它部分依赖它,会自动选上
 

在配置界面上对Linux进行配置时,对于[ ]选项可以按下“Y”键表示要编译进内核(即:该功能组件的二进制代码会进入最终的内核映像文件zImage中),“N”键表示不编译;对于< >选项,除了“Y”和“N”外,还可以按“M”键表示编译为模块(即:该功能组件的二进制代码并不进入zImage,但会单独形成一个后缀名为ko的文件。该ko文件就被称为模块,模块可以在操作系统启动后通过“insmod 模块文件名”将其加载进内核),以减小内核的大小。
执行以下配置:
1、选中Code maturity level options -- Prompt for development and/or incomplete code/drivers以便显示更多的配置选项
2、保持General setup的默认选择
3、保持Loadable module support的默认选择,以支持动态加载和卸载模块
4、保持Block layer的默认选择
5、System Type默认配置下,保留S3C2440 Machines 下的SMDK2440和SMDK2440 with S3C2440 CPU module,把其它类型的Machines全部去掉
6、保持Bus support的默认选择
7、保持Kernel Features的默认选择,不要选择Preemptible Kernel (EXPERIMENTAL)和Use the ARM EABI to compile the kernel
8、保持Boot options的默认选择
9、保持Floating point emulation的默认选择
10、去掉Userspace binary formats 下的“Kernel support for a.out and ECOFF binaries”,只保留“Kernel support for ELF binaries”
11、保持Power management options的默认选择
12、去掉Networking  

--  Networking options下的“IP: IPsec transport mode”、“IP: IPsec tunnel mode”、“IP: IPsec BEET mode”
13、Device Drivers
1)、Memory Technology Device (MTD) support
 

   a)、去掉RedBoot partition table parsing
 

   b)、去掉RAM/ROM/Flash chip drivers的全部选项
 

   c)、保持NAND Device Support -- NAND Flash support for S3C2410/S3C2440 SoC,以支持nand flash驱动
2)、去掉Parallel port support的全部选项
3)、Block devices
 

   a)、保留Loopback device support以支持环回设备
 

   b)、保留RAM disk support以支持ram disk
4)、去掉对ATA/ATAPI/MFM/RLL support的支持
5)、选中SCSI device support -- SCSI device support -- SCSI disk support,以支持U盘(U盘在Linux中被识别为SCSI硬盘)
6)、Network device support
 

   a)、去掉Ethernet (10 or 100Mbit) -- DM9000 support,因为开发板上的网卡不是DM9000,而是CS8900
 

   b)、去掉Ethernet (1000 Mbit) 和 Ethernet (10000 Mbit)
 

   c)、USB Network Adapters下,选中Multi-purpose USB Networking Framework Davicom和DM9601 based USB 1.1 10/100 ethernet devices以支持USB网卡DM9601;去掉其它选项
7)、Input device support
 

   a)、去掉对Keyboards的支持
 

   b)、去掉对Mice的支持
8)、Character devices去掉Non-standard serial port support和Legacy (BSD) PTY support。仅保留Watchdog Timer Support -- S3C2410 Watchdog,以支持看门狗驱动;保留Serial drivers默认配置,以支持串口。
9)、I2C support保持默认配置,以支持I2C驱动
10)、SPI support选中Samsung S3C24XX series SPI和Bitbanging SPI master,以支持SPI驱动
11)、去掉Hardware Monitoring support
12)、LED devices去掉LED Support
13)、Multimedia devices去掉DAB adapters
14)、Graphics support保持默认设置,以支持frame buffer以及LCD(需修改LCD驱动源代码)
15)、HID Devices清除所有选项,这将导致不支持usb鼠标、键盘等
16)、USB support
 

   a)、选中USB Mass Storage support,以支持U盘
 

   b)、USB Gadget Support,选中Support for USB Gadgets,选择将USB Gadget Drivers -- File-backed Storage Gadget编译为模块。以支持将开发板充当PC机的U盘。(需修改udc驱动源代码)
17)、Real Time Clock保持默认设置,以支持更新和获取实时时钟(需修改RTC驱动源代码)
修改arch/arm/mach-s3c2440/mach-smdk2440.c,在其第175行处增加一行:
&s3c_device_rtc,
13、File systems
1)、保留Second extended fs support以支持ext2文件系统。去掉Ext3 journalling file system support、ROM file system support
2)、在DOS/FAT/NT Filesystems下选中除NTFS debugging support之外的全部选项,以支持FAT文件系统和NTFS文件系统;
3)、选中Pseudo filesystems -- Virtual memory file system support (former shm fs)。以支持将目录挂载到内存。 

4)、Miscellaneous filesystems
 

   a)、保持Journalling Flash File System v2 (JFFS2) support。以支持jffs2文件系统
 

   b)、去掉Compressed ROM file system support (cramfs)
5)、Network File Systems
 

   a)、选中Provide NFSv3 client support。以支持开发板充当NFS客户端。
 

   b)、保持Root file system on NFS。以支持将NFS服务器上的共享目录挂载为根文件系统。
6)、Partition Types,去掉全部选项
7)、Native Language Support
 

   a)、选中Codepage 437 (United States, Canada)。以支持英文文件
 

   b)、Simplified Chinese charset (CP936, GB2312)。以支持中文文件
14、Kernel hacking,清除全部选项
四、验证内核功能
1、nand flash驱动
2、jffs2文件系统
由于根文件系统是jffs2文件系统并位于nand flash上,现在能正确加载根文件系统,说明内核已经支持这2个功能
3、ELF格式的应用程序
ls命令就是ELF格式的应用程序,现在能执行ls这样的命令,说明内核已经支持这个功能
4、串口驱动
已能通过超级终端接收和输入数据,说明内核已经支持这个功能
5、ram disk
6、ext2文件系统
mke2fs  

  /dev/ram3
mount  

–t  ext2   /dev/ram3    /mnt
touch  

  /mnt/yangzhu
ls  

 /mnt 显示存在yangzhu这个文件
reboot后,重新执行
mount  

–t  ext2   /dev/ram3    /mnt
显示错误。说明内核已经支持这2个功能。
7、环回设备
dd  

  if=/dev/zero    of=/test.img    bs=512    count=8190
losetup  

  /dev/loop0    /test.img
mke2fs  

  /dev/loop0
mount  

   -t    ext2    /dev/loop0    /mnt
touch  

  /mnt/yangzhu
ls  

  /mnt   可以看到存在文件yangzhu
umount  

  /dev/loop0
reboot后执行:
losetup  

  /dev/loop0    /test.img
mount  

   -t    ext2    /dev/loop0    /mnt
ls  

  /mnt   可以看到文件yangzhu仍然存在。说明内核已经支持这个功能。
8、将目录挂载到内存
mount  

  -t    tmpfs    none    /mnt
touch  

  /mnt/yangzhu
ls  

  /mnt 显示存在文件yangzhu
reboot后重新执行
mount  

  -t    tmpfs    none    /mnt
ls  

  /mnt 显示文件yangzhu不存在。说明内核已经支持这个功能。
9、能识别U盘FAT分区和NTFS分区上的中英文文件
插入格式化为FAT文件系统的U盘后,执行
mount  

  /dev/sda1    /mnt  (或者需要输入的是 mount    /dev/sda    /mnt)
ls  

  /mnt
可看到U盘上的中英文文件。
插入为格式化为NTFS文件系统的U盘后,执行
mount  

  -t    ntfs    -o    ro,nls=cp936    /dev/sda1    /mnt
ls  

  /mnt
可看到U盘上的中英文文件。
说明内核已经支持这个功能。
注:之所以要加入-o  

  ro这个选项,是因为目前linux对于NTFS分区的写入操作的支持很有限,并且不太完善。
10、更新和获取实时时钟
date -s 040210102010 #设置时间为 2010-04-02 10:10
hwclock -w #把刚刚设置的时间存入S3C2440 内部的RTC
reboot后使用date显示当前时间,变为了2010-04-02 10:11:02。说明内核已经支持这个功能。
11、watchdog驱动
# watchdog -t 1 /dev/watchdog
# killall watchdog
s3c2410-wdt: Unexpected close, not stopping watchdog!
#
U-Boot 1.1.6 (Sep  

8 2009 - 11:22:15)
DRAM:  

64 MB
Flash:  

1 MB
NAND:
在开启watchdog功能后停止喂狗,结果系统重新启动。这说明内核已经支持这个功能。
注:暂不验证 12、I2C驱动;13、SPI驱动;14、framebuffer;剩余功能在下文中验证。

如何移植Linux内核2.6.32到2440开发板

如何移植Linux内核2.6.32.2到2440开发板

 

一. 移植环境

主机:虚拟机 Fedora9

目标机:友善之臂 QQ2440开发板

交叉编译器:arm-linux-3.4.1

二. 移植linux-2.6.32.2内核到QQ2440开发板

1.获得内核: http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.32.2.tar.bz2

2.解压内核: tar –jxvf  linux-2.6.32.2.tar.bz2

3.修改参数:

1、    进入内核目录,修改makefile

ARCH ?=arm

CROSS_COMPILE ?=arm-linux-

然后执行如下的命令,使用arch/arm/configs/s3c2410_defconfig文件来配置内核,它生成.config配置文件,以后就可以直接使用”make menuconfig”修改配置了。

make s3c2410_defconfig

最后是编译生成内核,执行”make”命令将在顶层目录下生成内核映像文件vmlinux;执行”make uImage”除生成vmlinux外,还在arch/arm/boot目录下生成U-Boot格式的内核映像文件uImage;执行”make zImage”除生成vmlinux外,还在arch/arm/boot目录下生成vivi引导的内核映像文件zImage。

2、  修改平台输入时钟由于QQ2440板子 系统时钟源为 12M 无源晶振

找到内核源码arch/arm/mach-s3c2440/mach-smdk2440.c文件,

static void __init smdk2440_map_io(void)

{

s3c24xx_init_io(smdk2440_iodesc, ARRAY_SIZE(smdk2440_iodesc));

s3c24xx_init_clocks(12000000);//原来是16934400

s3c24xx_init_uarts(smdk2440_uartcfgs, ARRAY_SIZE(smdk2440_uartcfgs));

}

3、  修改MTD分区信息

修改文件arch/arm/plat-s3c24xx/common-smdk.c。

第一,修改分区信息(64M):

static struct mtd_partition smdk_default_nand_part[] = {

[0] = {

.name = "bootloader",

.offset = 0x00000000,

.size = 0x00030000,

},

[1] = {

.name = "kernel",

.offset = 0x00050000,

.size = 0x00200000,

},

[2] = {

.name = "root",

.offset = 0x00250000,

.size = 0x03dac000,

}

};

4、  修改S3C2440 的机器号

由于Bootloader 传递给Linux 内核的机器号为782(根据实际的情况)

修改 arch/arm/tools/mach-types 文件

s3c2440      ARCH_S3C2440 S3C2440    782

5、 给内核打yaffs2文件系统的补丁

从http:/www.aleph1.co.uk/cgi-bin/viewcvs.cgi/获取源代码文件cvs-root.tar,解压源码目录并进入目录

cd /…/…/cvs/yaffs2

./patch-ker.sh c  /

上面命令完成下面三件事情:

(1) 修改内核fs/Kconfig

增加一行:source "fs/yaffs2/Kconfig"

(2) 修改内核fs/Kconfig

增加一行:ojb-$(CONFIG_YAFFS_FS) +=yaffs2/

(3) 在内核fs/目录下创建yaffs2 目录

将yaffs2 源码目录下面的Makefile.kernel 文件复制为fs/yaffs2/Makefie;

将yaffs2 源码目录的Kconfig 文件复制到内核fs/yaffs2 目录下;

将yaffs2 源码目录下的*.c *.h 文件复制到内核fs/yaffs2 目录下.

6、内核配置

1> 进入Linux-2.6.32.2内核主目录,通过以下命令将2410的默认配置文件写到当前目录下的.config。S3C2410的配置和S3C2440差不多,,在这基础上进行修改。

make  s3c2410_defconfig (也可以上面就做)

2> 配置内核模块的功能,有几种方式可以进行界面选择:

make menuconfig(文本选单的配置方式,在有字符终端下才能使用)

make xconfig(图形窗口模式的配置方式,图形窗口的配置比较直观,必须支持Xwindow下才能使用)

make oldconfig(文本配置方式,在原内核配置的基础修改时使用)

这里使用make menuconfig命令。

3> [*]Enable loadable module support--->

[*]Forced module loading

[*]Module unloading

4> System Type--->

S3C2410 Machines--->

[*]SMDK2410/A9M2410选上 其余不选

S3C2440 Machines--->

[*]SMDK2440

[*]SMDK2440 with S3C2440 CPU module,其余不选

其余的Machines下选项全部不选(如2400,2412,2442,2443)

5> Kernel Features--->

[ ]Use the ARM EABI to compile the kernel

注:如果所使用的的交叉编译arm-linux-gcc-4.3.2是符合EABI标准交叉编译器,对于浮点运行会预设硬浮点运算FPA(Float Point Architecture),而没有FPA的CPU,比如SAMSUNG S3C2410/S3C2440,会使用FPE(Float Point Emulation 即软浮点),这样在速度上就会遇到极大的限制,使用EABI(Embedded Application Binary Interface)则可以对此改善处理,ARM EABI有许多革新之处,其中最突出的改进就是Float Point Performance,它使用Vector Float Point(矢量浮点),因此可以极大提高涉及到浮点运算的程序。

6> Boot options-?

noinitrd root=/dev/mtdblock2 init=/linuxrc  console=ttySAC0

7> Userspace binary formats--->

[*]Kernel support for ELF binaries

其它的可以全部不选。

8> 选择支持yaffs2文件系统

Filesystem--->

Miscellaneous filesystems--->

<*>YAFFS2 file system support

[*] Lets Yaffs do its own ECC

Native language support

<*> Codepage 437 (United States,Canada)

<*>Simplified Chinese charset(GB2312)

<*>Traditional Chinese charset(Big5)

<*>NLS ISO 8859-1(Latin1:Western European Languages)

<*>NLS UTF-8

配置完成以后,我们就可以通过以上的命令生成我们需要的uImage或者zImage镜像文件了,然后通过uboot或者supervivi烧写内核。我们通过supervivi的USB工具下载的内核启动情况如下:

Copy linux kernel from 0x00050000 to 0x30008000, size = 0x00200000 ... done

zImage magic = 0x016f2818

Setup linux parameters at 0x30000100

linux command line is: "noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySA

C0"

MACH_TYPE = 782

NOW, Booting Linux......

Uncompressing Linux.............................................................

....................................... done, booting the kernel.

Linux version 2.6.32.2 (root@localhost.localdomain) (gcc version 3.4.1) #1 Fri M

ay 7 16:57:01 CST 2010

CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=c0007177

Machine: SMDK2440

。。。。。。。。。

Failed to execute /linuxrc.  Attempting defaults...

Kernel panic - not syncing: No init found.  Try passing init= option to kernel.

从以上的启动信息可知还需要文件系统才能启动。

下一步我们将建立yaffs根文件系统。

<

RedHat企业版5.0下YUM服务器搭建

YUM服务涉及到客户端与服务端,其中:
1。YUM Client:要保证安装有如下软件包:
yum-3.0.1-5.el5
yum-metadata-parser-1.0-8.fc6
2。YUM Server:要保证安装有如下软件包:
yum-3.0.1-5.el5
yum-metadata-parser-1.0-8.fc6
yum-rhn-plugin-0.4.3-1.el5
yum-updatesd-3.0.1-5.el5
createrepo-0.4.4-2.fc6.noarch.rpm
yum-arch-2.2.2-2.fc7.noarch.rpm
yum服务器的安装
1。存放YUM服务器上的软件包
放入redhatES5系统盘,将其挂载到/mnt
再生成/rhel5目录用于存放软件包:
[root@ns100 vmware]# mkdir /rhel5
将光盘上Server目录(该目录主要存放一些服务端软件包)下的所有软件包拷入/rhel5,因为Server目录中软件包较多,rhel5可能放不下,此时可以格式化一块5G的分区,挂载于/rhel5目录下。
[root@ns100 vmware]# cp -R /mnt/Server /rhel5
将key文件(用于客户端与服务端的认证)拷入指定目录
[root@ns100 vmware]# cp /mnt/RPM-GPG-KEY-redhat-release /rhel5/Server
备注:如果有系统光盘的iso文件(光盘镜像文件),可以利用此文件来做虚拟光驱,再将此虚拟光驱挂载到/mnt,方法如下:
mount -o loop redhat.iso /mnt
进入/mnt即可使用了;
2。服务端设置软件仓库及报告文件
首先,生成YUM的软件仓库:
[root@ns100 vmware]# yum-arch /rhel5/Server 注:即可有出错也可不管
再设置给客户端获取的报告文件:
[root@ns100 vmware]# createrepo /rhel5/Server
3。配置www服务,用于发布这些软件包
在/etc/httpd/conf/httpd.conf中进行如下配置(注:如果httpd起不来,此时用setenforce 0将SELinux关闭即可)
DocumentRoot "/var/www/html" 改为 DocumentRoot "/rhel5"
改为
接着重启http服务:
[root@localhost ~]# service httpd restart
Stopping httpd: [ OK ]
Starting httpd: [ OK ]
4。客户端配置:
方法1
在/etc/yum.repos.d/下生成Server.repo文件注:如果/etc/yum.conf有设置的话优先从yum.conf中查找;
Client:
最好把原来的.repo文件备份一下:
[root@network yum.repos.d]# mkdir -p /etc/yum.repos.d/backup
[root@network yum.repos.d]# mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup
[root@network yum.repos.d]# touch /etc/yum.repos.d/Server.repo
[root@network yum.repos.d]# cat /etc/yum.repos.d/Server.repo (注:如果配置yum.conf的话,其尾部也加入如下内容,其余不变;)
[Server]
name=Red Hat
baseurl=http://10.0.0.1/Server/
gpgcheck=1
gpgkey=http://10.0.0.1/Server/RPM-GPG-KEY-redhat-release
方法2
修改默认的/etc/rhel-debuginfo.repo 改两处地方
baseurl=http://10.0.0.1/Server/
enabled=1来源:考试大-Linux认证
5。测试
在客户端执行如下命令:
yum install dasher
yum -y install firefox 安装自动应答为yes
yum remove httpd 删除软件包
yum clean all 清空下载的软件包的缓存
yum list 列出所有的软件包(包括已安装和在YUM服务器上存在的)
yum upgrade或yum update 升级软件包
yum list installed 列出所有已经安装的软件包
yum list available 列出所有可用的软件包
yum list updates 列出所有可升级的软件包
附:基于FTP的YUM服务器搭建
1 放入redhatES5系统盘,将其挂载到/mnt
[root@ns100 vmware]# cp -R /mnt/Server /var/ftp/Server
[root@ns100 vmware]# cp /mnt/RPM-GPG-KEY-redhat-release /var/ftp/Server
2。[root@ns100 vmware]# yum-arch /var/ftp/Server 注:即可有出错也可不管
[root@ns100 vmware]# createrepo /var/ftp/Server
3。配置yum.conf
[root@ns100 vmware]# cat /etc/yum.conf
[main]
cachedir=/var/cache/yum
keepcache=0
debuglevel=2
logfile=/var/log/yum.log
pkgpolicy=newest
distroverpkg=redhat-release
tolerant=1
exactarch=1
obsoletes=1
gpgcheck=1
plugins=1
metadata_expire=1800
4。运行vsftp服务
service vsftpd restart
5。客户端配置:
方法1
在/etc/yum.repos.d/下生成Server.repo文件注:如果/etc/yum.conf有设置的话优先从yum.conf中查找;
Client:
[root@network yum.repos.d]# mkdir -p /etc/yum.repos.d/backup
[root@network yum.repos.d]# mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup
[root@network yum.repos.d]# touch /etc/yum.repos.d/Server.repo
[root@network yum.repos.d]# cat /etc/yum.repos.d/Server.repo 注:yum.conf尾部也加入如下内容,其余不变;
[Server]
name=Red Hat
baseurl=ftp://10.0.0.1/Server/
gpgcheck=1
gpgkey=ftp://10.0.0.1/Server/RPM-GPG-KEY-redhat-release
方法2
修改默认的/etc/rhel-debuginfo.repo 改两处地方
  baseurl=ftp://10.0.0.1/Server/

 enabled=1