tools toolset

大家好,关于tools-freebsd卸载很多兄弟都还不太明白,不过没关系,由于今天小编就来为大家同享关于linux的uboot启动映像,zImage和uImage的不同差异的姿势点,相信应该可以化解大家的一些困惑和难题,如果碰巧可以化解无论兄弟们的难题,还望关注下本站哦,希望对各位有所帮助!
一、linux的uboot启动映像,zImage和uImage的不同差异
linux的uboot启动映像、zImage和uImage的不同差异
uboot启动zImage(go)和uImage(bootm)解析
1.bootm加载linux镜像是加载uIamge,uIamge是由mkimage制作而来,和zIamge的差异是uIamge是zIamge压缩过的,bootm需要先对uIamge解压,解压地址为内核入口地址。当解压完成时uIamge和zIamge几乎是相同的,具体差异可以论述。uboot目前只能支持uImage启动,不支持zImage启动
2.bootm解压经过
---------------------------------------------------------------------------
## Booting image at 08808000...
Image Name: Linux-2.6.14.7
Image Type: ARM Linux Kernel Image(uncompressed)
Data Size: 989172 Bytes= 966 kB
Load Address: 08008000
Entry Point:08008000
Verifying Checksum... OK
OK uboot bootm命令对uIamge的解压操作
---------------------------------------------------------------------------
Starting kernel...
传递内核参数将控制权交给arch\arm\boot\compressed]head.S
----------------------------------------------------------------------------
如mx1ADS班子内存的起始地址为0x0800_0000,通过tftp下载到0x0800_8000+offset,offset大于0x80_0000,即tftp 0x0880_8000接着bootm 0x0880_8000马上0x0880_8000处的uIamge解压,解压地址即为mkimage配置的kernel入口地址0x0800_8000。
zImage和uImage的不同差异一、vmlinuzvmlinuz是可引导的、压缩的内核。“vm”代表“Virtual Memory”。Linux支持虚拟内存,不像老的操作体系比如DOS有640KB内存的限制。Linux能够运用硬盘空间作为虚拟内存,因此得名“vm”。
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。
二、 initrd-x.x.x.img
initrd是“initial ramdisk”的简写。initrd一般被用来临时的引导硬件到实际内核vmlinuz能够接管并继续引导的情形。
initrd映象文件是运用mkinitrd创建的。mkinitrd实用程序能够创建initrd映象文件。这个命令是RedHat专有的。其它Linux发行版或许有相应的命令。这是个很方便的实用程序。具体情况请看帮助:man mkinitrd下面的命令创建initrd映象文件。
最后生成的内核镜象有两种zImage以及uImage。其中zImage下载到目标板中后,可以直接用uboot的命令go来进行直接跳转。这时候内核直接解压启动。然而无法挂载文件体系,由于go命令没有将内核需要的相关的启动参数传递给内核。传递启动参数大家必须运用命令bootm来进行跳转。Bootm命令跳转只处理uImage的镜象。
uboot源代码的tools/目录下有mkimage工具,这个工具可以用来制作不压缩或者压缩的多种可启动映象文件。
mkimage在制作映象文件的时候,是在原来的可执行映象文件的前面加上壹个0x40字节的头,记录参数所指定的信息,这样uboot才能识别这个映象是针对何者CPU体系结构的,何者OS的,哪种类型,加载内存中的何者位置,入口点在内存的那个位置以及映象名是啥子
用法如下:
./mkimage-A arch-O os-T type-C comp-a addr-e ep-n name-d data_file[:data_file...] image
-A==> set architecture to'arch'
-O==> set operating system to'os'
-T==> set image type to'type'
-C==> set compression type'comp'
-a==> set load address to'addr'(hex)
-e==> set entry point to'ep'(hex)
-n==> set image name to'name'
-d==> use image data from'datafile'
-x==> set XIP(execute in place)
参数说明:
-A指定CPU的体系结构:
取值表示的体系结构
alpha Alpha
arm A RM
x86 Intel x86
ia64 IA64
mips MIPS
mips64 MIPS 64 Bit
ppc PowerPC
s390 IBM S390
sh SuperH
sparc SPARC
sparc64 SPARC 64 Bit
m68k MC68000
-O指定操作体系类型,可以取下面内容值:
openbsd、netbsd、freebsd、4_4bsd、linux、svr4、esix、solaris、irix、sco、dell、ncr、lynxos、vxworks、psos、qnx、u-boot、rtems、artos
-T指定映象类型,可以取下面内容值:
standalone、kernel、ramdisk、multi、firmware、script、filesystem
-C指定映象压缩方法,可以取下面内容值:
none不压缩
gzip用gzip的压缩方法
bzip2用bzip2的压缩方法
-a指定映象在内存中的加载地址,映象下载到内存中时,要按照用mkimage制作映象时,这个参数所指定的地址值来下载
-e指定映象运行的入口点地址,这个地址就是-a参数指定的值加上0x40(由于前面有个mkimage添加的0x40个字节的头)
-n指定映象名
-d指定制作映象的源文件
我在编译时用到的命令如下:
# make zImage//生成zImage镜象
#/usr/local/arm/k9uboot/tools/mkimage-n'Linux 2.4.27'-A arm-O linux-T
kernel-C none-a 0x20007fc0-e 0x20008000-d zImage uImage
内核镜象已经准备这个时候大家就要来准备文件体系了。由于时刻缘故,本人暂时采用的是其他人已经好的文件体系k9.img.gz。这个时候大家要做的是,自己写壹个简单hello.c的程序,编译通过后加入到该文件体系中,接着下载到目标板中运行。
先编写hello.c;
编译:
#/usr/local/arm/2.95.3/bin/arm-linux-gcc–o start-hello hello.c
编译后生成可执行文件start-hello
下面大家就必须把该执行文件加入到文件体系中去,流程如下:
#gunzip k9.img.gz//解压缩
#mount–o loop k9.img/mnt/new_disk//挂载
#cp start-hello/mnt/new_disk//将文件拷贝到文件体系中
#cd/mnt/new_disk
#umount/mnt/new_disk//卸载
#gzip–c–v9 k9.img> k9.img.gz//压缩生成最终的文件体系
下面大家就要下载内核以及准备好文件体系了,这边先说明我的内存分配情况如下:
Flash:
0x10000000――― 0x10020000 boot
0x10020000――― 0x10040000 uboot
0x10040000――― 0x10060000 uboot env
0x10060000――― 0x10200000 kernel
0x10200000――― 0x11000000 ramdisk
Sdram:
0x20007fc0――― 0x20a00000 kernel
0x20a00000―――ramdisk
Loadb通过串口下载数据到ram中
cp.b拷贝ram中的数据到flash中。
将kernel以及文件体系ramdisk下载完毕之后,大家还需要配置uboot的环境变量,这样uboot才能够在上电启动的时候启动内核等操作。环境变量配置如下:
Set cpfltoram cp.b 10200000 20a00000 18ffff//拷贝文件体系到ram中
Set boot bootm 20007fc0//启动kernel
Set bootcmd run cpfltoker\;run cpfltoram\;run boot//uboot复位的执行指令
Set cpfltoker cp.b 10060000 20007fc0 f4fff//拷贝内核到ram中
Set bootargs root=/dev/ram rw initrd=0x20a00000,4M init=/linuxrc console=ttyS0,11520
0,mem=32m//uboot传递给内核的启动参数
配置完毕后,saveenv把环境变量存储起来。
进修心得:zImage和uImage都是生成的可执行内核镜像文件
2者在u-boot中启动的方法分别是 go addr和 bootm addr来实现启动经过的
即对于zImage是通过 go来进行引导而uImage是通过bootm来进行引导的
zImage和 uImage 2者的关系是 uImage是zImage通过mkimage(u--boot下面tools下的工具)来生成的
结局是后者比前者在头部多了64个byte,这多余的64个byte是用来通知给u-boot用的;将相关信息告知u-boot;
这样做的结局在u-boot引导内核时存在2个地址:loadaddress和entry address 2者的差值刚好是0x40(64byte)的大致
这样在运用bootm loadaddress时u-boot会根据相应的loadaddress进行调整,有2中情况;
1)、当loadaddress和mkimage时传送的一致时:
那么在加载 ldr pc,entry address时,会选择mkinage时的entry地址;即pc=loadaddress+ 4;接着由pc来控制流程跳转倒ram中去执行;
2)、当loadaddress和mkimage时传送的不一致时:
u-bbot会进行地址相对后,将当前的loadaddress减去64byte后,将真正的内核映像(去掉64byte头部的内核)拷贝倒预先制定的loadaddress,接着直接从这个loadaddress来引导内核运行;
那么上面2中情况实际不同差异呢?其实就是最终代码执行时,如果地址和mkinage时指定的不符,那么u-boot将进行去头后,拷贝内核代码,直接执行;而如果不处理,则会将 loadaddress+0x40来执行内核;
通过tftp服务来下载 zImage或者uImage;
loadb在tftp不成功的情况下运用串口来下载内核希望不要用这个方式
cp【.b\.w\.l】完成内存之间内存给flash之间进行拷贝
最后可以配置 bootcmd环境变量可以实现 u-boot自动引导内核启动
至于文件体系的2中方法:ramdisk以及nfs主推开发者运用nfs方便修改;
当运用ramdisk时,
#gunzip k9.img.gz//解压缩
#mount–o loop k9.img/mnt/new_disk//挂载
#umount/mnt/new_disk//卸载
#gzip–c–v9 k9.img> k9.img.gz//压缩生成最终的文件体系
这四条命令不要忘记,对于你来说多么强大
不要你去再建立根文件体系。
二、怎样在CentOS中配置及配置Asterisk
怎样在CentOS中配置及配置Asterisk
Asterisk是第一套以放开源代码软件实作的用户交换机(PBX)体系。Asterisk由 Digium的创办人 Mark Spencer于 1999年间,他还在奥本大学念书时开发出。和其他的用户交换机体系相同,Asterisk同样支援电话拨打另一只分机,和拨打到公共交换电话网和IP电话体系。Asterisk这个名称源自于星号"*"。
Asterisk采用双轨授权玩法,不收费玩法运用 GNU General Public License(GPL)授权,而商用授权运用 proprietary玩法,此授权不需要将体系源代码公开。
体系一开始之开发平台为 Linux,目前已可在等于多种的平台上运行,其中包括 NetBSD, OpenBSD, FreeBSD, Mac OS X和 Solaris。亦有人将体系移植到 Microsoft Windows平台上,即为 AsteriskWin32。Asterisk是等于轻量级的体系,可以在如 OpenWrt之类的嵌入式体系上运作。
下面的内容将带大家怎样在CentOS中配置及配置Asterisk。
下面内容没有独特注明,全部操作都是在命令行中
[前期准备]配置依赖软件和环境
yum–y upgrade(更新软件列表和部分软件)
yum–y update(更新现有软件)
yum install kernel-devel(配置devel版的内核,asterisk配置需要)
yum install kernel-PAE-devel(IntelCPU的服务器上超过4G内存是需要用到)
yum install bison
yum install bison-devel
yum install ncurses
yum install ncurses-devel
yum install zlib
yum install zlib-devel
yum install openssl
yum install openssl-devel
yum install gnutls-devel
yum install gcc
yum install gcc-c++
yum install newt-devel
yum install curl
yum install curl-devel
yum install mysql-devel
以上软件的配置可以用下面内容命令一起配置
yum–y install kernel-devel kernel-PAE-devel bison bison-devel ncurses ncurses-devel zlib zlib-devel openssl openssl-devel gnutls-devel gcc gcc-c++ newt-devel curl curl-devel mysql-devel
reboot配置完这些软件需要重启一下
显示体系已经配置的组件,和可以配置的组件:
#yum grouplist如果体系配置之初采用最小化配置,没有配置xwindow,那么先配置:
#yum groupinstall"X Window System"
配置GNOME桌面环境 yum groupinstall"GNOME Desktop Environment"
配置KDE桌面环境 yum groupinstall"KDE(K Desktop Environment)"
卸载GNOME桌面环境
yum groupremove"GNOME Desktop Environment"
卸载KDE桌面环境 yum groupremove"KDE(K Desktop Environment
centos英文版下怎样配置中文语言包
centos配置经过中,配置语言包时选择了english,在配置完毕后浏览中文网页或查看中文文档时总是宣誓乱码,因此需要配置中文语言包,如果不能从配置盘进行配置,可以通过yum进行配置,配置办法为:
yum groupinstall<language>-support
在上面的命令中,<language>是下列其中一个: assamese, bengali, chinese, gujarati, hindi, japanese, kannada, korean, malayalam, marathi, oriya, punjabi, sinhala, tamil, thai,或 telegu。
VNC
xsetroot-solid grey
vncconfig-iconic&
#xterm-geometry 80×24+10+10-ls-title“$VNCDESKTOP Desktop”&
gnome-session&
startkde&
twm&
[准备所需软件]
Asterisk 1.4.26.2
Dahdi-linux-complete-2.2.0.2+2.2.0(包含dahdi-linux 2.2.0.2和dahdi-tools 2.2.0)
Libpri 1.4.10.1
Asterisk-addons 1.4.9
asterisk-sounds 1.2.1
[配置经过]
tar-xvzf libpri-1.4.10.1.tar.gz
tar-xvzf dahdi-linux-complete-current.tar.gz
tar-xvzf asterisk-1.4.26.2.tar.gz
tar-xvzf asterisk-addons-1.4.9.tar.gz
tar-xvzf asterisk-sounds-1.2.1.tar.gz
cd libpri-1.4.10.1
make&& make install
cd../dahdi-linux-complete-2.2.0.2+2.2.0
make all
make install
make config
cd../asterisk-1.4.26.2
./configure
make menuselect(编译选项选择)
make&& make install
make samples
make config
cd../asterisk-addons-1.4.9
cd cdr
修改cdr_addon_mysql.c,具体操作如下
输入命令”vi cdr_addon_mysql.c”
移动光标到开头的壹个空白行,按下键”i”
输入”#define MYSQL_LOGUNIQUEID”
按”esc”键,输入”:wq”回车
cd..
./configure
make menuselect
make&& make install
make samples
cd../asterisk-sounds-1.2.1
make&& make install
cd/etc/init.d/
./asterisk start
asterisk-r
Asterisk功能说明
Asterisk包含许多多昂贵的商用交换机体系才具有的功能,例如:语音信箱、多方语音会议、交互式语音应答(IVR)、电话选单和电话客服中心等机制。
管理者亦可透过 Asterisk内建的分机操作语言撰写拨号脚本以达到独特的功能目的。甚至可以透过 C语言撰写相容的模组,或以任何相容的语言借由 stdin和 stdout或网络 TCP socket开发Asterisk Gateway Interface(AGI)程式。
若要 Asterisk体系拨打至公共交换电话网或中继链接公共交换电话网,管理者必须配置适当的硬件。如由 Digium官方生产之各种 PCI接口卡,用以提供 Asterisk连接 T1、E1线路或其他传统线路之能力。中国大陆亦有如 OpenVox价格相对低廉之相容接口卡。
Asterisk支援特别广泛的影像和IP电话协定[4]。包括会话发起协议(SIP)、Media Gateway Control Protocol(MGCP)和 H.323协定。Asterisk可相容于大部分的 SIP电话。Inter-Asterisk eXchange(IAX2)协定一个由 Asterisk原生提供的 Asterisk PBX交换机间中继链接协定,部分 VoIP服务商甚至原生支援 IAX2协定。
为了满足传统电话和 IP电话混合的服务环境,Asterisk可以让管理者提议壹个最新单一的电话体系,或逐步的将既有电话体系转移运用新技术。部分的企业直接运用 Asterisk取代传统的交换机,而有些企业则运用 Asterisk提供进阶功能,如语音信箱等,或将长途电话透过 Asterisk改以网络传输以达到节费机制。
由于Asterisk过于专业且复杂,因此目前也存在大量衍生自Asterisk但简化过的通信体系,以让用户较容易运用。比如在欧美相对流行的elastix、trixbox、或以简体中文为基础的Freeiris等。
