分类 Linux 下的文章

如何移植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

如何在REDHAT 5下搭建自己的YUM

如何在REDHAT5.1下搭建自己的YUM
大家知道,REDHAT5.0后在X界面下使用“Add/Remove Software”是不能安装或者卸载软件包的,如果要使用要么去花钱注册,要么自己搭建一个本地的YUM源。
用过LINUX的人都知道,有时候安装程序包是一件非常痛苦的事,经常是要装A就要先装B,而装B前要先装C,装C前又要先安装A。碰到这种死循环会让你苦笑不得。但如果搭建一个YUM,就可以比较好的解决(至少系统光盘自带的包)各种包的依赖性关系。
本文就是探讨如何去搭建一个本地的YUM源。
一,准备工作
1,启动REDHAT Linux ,并放入安装光盘
2,挂载光驱  mount /dev/cdrom /mnt
3,安装FTP服务.如果你只是自己本机使用YUM源可以省略掉这一步
cd  /mnt/Server
rpm  -ivh vsftpd*
chkconfig vsftpd on
service vsftpd start
4,安装createrepo软件包
rpm –ivh createrepo*
5,拷贝系统盘中的文件本系统中
cp  -R  /mnt/Server  /var/ftp/pub
二,搭建YUM
1,  生成依赖性关系
createrepo -g /var/ftp/pub/Server/repodata/comps-rhel5-server-core.xml /var/ftp/pub/Server/
这个地方要注意,comps-rhel5-server-core.xml一定不能手动生成,默认安装光盘上已经有了
2,  做完上面的步骤后会有一个错误提示,“Could not remove old metadata dir: .olddata“说目录有问题。不用管他,把那个目录删除掉
rm  –rf  /var/ftp/pub/Server/.olddata
3, 把步骤1再做一遍
createrepo -g /var/ftp/pub/Server/repodata/comps-rhel5-server-core.xml /var/ftp/pub/Server/
4,cd  /etc/yum.repos.d
vim yum.repo   (新建一个仓库文件,名字可以随便起,在文件中写如下内容)
[base]
name=base
baseurl=ftp://192.168.0.6/pub/Server  #192.168.0.6是你的YUM源地址
enabled=1                         #是否开启源
gpgcheck=1                        #是否验证,可不要
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release  #验证的密钥,可不要
~
经过以上步骤后,自己的YUM源就搭建好了。当然,你可以把你的源提供给别人使用,要使用的人只用将你的repo文件复制一份到/etc/yum.repos.d/下,或者自己手写一份。如果还想做其他仓库,比如VT,Cluster,ClusterStorage, 重复上面的步骤,然后改改仓库文件就可以了。
有了YUM,以后再安装软件包就方便很多了,不用考虑依赖性关系。

如何重置Linux超级用户的密码

相信有一些大头虾的用户会忘记linux系统的超级用户的密码,那么应该怎么办呢?
下面给大家一个简单的办法重置用户密码:
1单用户操作方式下,启动计算机,出现RedHad Linux和Dos开机菜单;
2光标移到RedHat Linux处;
3按“e”键,选取“kernel /vmlinu2-2.4 20-8 ro root=LABEL/=/”(用“↓”);
4再按“e”键,输入“∪ single” ↙;告诉引导装载程序引导单用户模式,按回车使编辑生效
5按“b” 键,出现“sh-2.05b#”;
6输入passwd root↙
7在“New Password:”后输入新口令(如123456)↙;
8在“Retype new Password:”后再次输入新口令↙,键入口令,再确认,出现“Passwd:all authentication tokens updated
successful.”
9在“sh-2.05b#”后输入“reboot”,重启计算机,或#exit 继续向下引导,至此完成操作。
注意:重启后加入的空格+single 或 空格+1 不会被保存