uclinux 详细步骤
- 格式:doc
- 大小:22.50 KB
- 文档页数:2
uClinux 的编译和运行说明:这个编译过程是基于uClinux-dist-51EDA.tar.bz2这个文件可以在51EDA论坛的客服中心找到。
1.创建开发环境首先需要编译的环境。
我们最好使用Linux作为开发平台,因为Linux以及uClinux的开发者们基本都是在Linux下完成的开发。
为了能够编译uClinux,我们需要下载uClinux的编译器。
这个文件可以在uClinux的官方网站得到,也可以在论坛的客服中心下载。
官方的下载地址是:/pub/uClinux/arm-elf-tools/arm-elf-tools-20030314.sh但是这个网站的速度比较慢,因此您也可以在论坛的客服中心下载。
是一样的文件。
在这里需要注意的是,虽然同为gcc和binutils工具,但是必须使用uClinux发布的版本,因为这个gcc和binutils都是为了能够编译FLAT格式的文件而订制的,另外也加入了ARM对PIC(Position Independent Code,位置无关代码)的支持。
PIC的支持是用来编译动态库或者XIP模式的可执行文件。
关于XIP的介绍有一篇文章:/article.pl?sid=02/08/28/0434210大家可以了解一下XIP。
但是由于XIP并不是很稳定,所以在我们发布的uClinux版本中并没有使用这个技术。
然后,将下载得到的文件,是一个sh文件。
这是一个自解压的文件(就好比Windows 下面的自解压zip或者rar一样)。
为了能够运行,我们需要:./arm-elf-tools-20030314.sh这样如果不能运行的话,那应该使用下面的命令:chmod 755 arm-elf-tools-20030314.sh得到了编译环境,就可以编译源代码了。
当然,首先要把代码解压缩到你的目录下面:tar xjvf uClinux-dist-51EDA.tar.bz2它会把全部的文件解压缩到uClinux-dist的目录下。
uCLinux开发介绍严永红Linux是当前一种非常受欢迎的操作系统,它与UNIX系统兼容,并开放源代码。
它包含所有现代操作系统所具有的一切特性,包括多任务,虚拟内存,代码共享,按需载入,内存管理,以及TCP/IP网络。
并且,它遵循POSIX标准,只要是遵循POSIX API的应用程序很容易被移植。
目前,随着嵌入式系统的蓬勃发展。
Linux也已对嵌入式系统的开发产生具大影响。
大多数流行的CPU都被移植上去,ARM, PowerPC , MIPS, 68K, SPARC, Alpha, SH 等等. 这些CPU都含有一种叫做内存管理单元(MMU)的硬件,来支持标准Linux所需要的虚拟内存。
但在嵌入式世界里,还有很多CPU是没有MMU的,象ARM7、68328等等。
uClinux 正是为了解决这种没有MMU的CPU而产生的。
在uCLinux这个英文单词中,u表示Micro,小的意思,C表示Control,控制的意思,连起来就是Micro-Control-Linux, ―运行在微控制器上的Linux.‖针对这种没有MMU的CPU架构,uCLinux采用了一种平板式(Flat)的内存模型来去除对MMU的依赖, 并且改变了用户程序的加载方式,开发了运用于uCLinux的C函数库--uCLibc. 由于这些变化,一般的Linux开发工具(例如GDB)在开发uCLinux时会碰到一些困难,包括内核的移植,驱动程序及应用程序的调试。
针对这样状况。
Hitool System公司开发了Hitool for uClinux开发套件,来帮助用户开发基于uClinux的系统。
Hitool for uClinux与其它的Linux开发工具相比,有几个优点:A.整个开发过程只在Windows环境下完成,包括内核的配臵、编译,应用程序的编译,文件系统的生成,内核的调试,用户程序的调试。
B.可以采用多种调试方式,既可以采用JTAG方式来调试,也可通过网口用Hitool自己的监控程序(MDB)来调试。
一、嵌入系操作系统uClinux的简述 (2)二、开发模式和交叉编译环境的建立 (4)1、主机和目标板的开发模式 (4)2、交叉编译环境 (4)三、uClinux的编译步骤 (5)1、下载uclinux (5)2、解压缩 (5)3、编译uClinux内核 (6)4、使用uClinux (11)四、用户应用程序的开发 (15)1、在uclinux中添加用户的应用程序 (15)2、在make menuconfig中加入用户应用程序的选项 (18)五、uclinux环境分析 (20)1、系统目录结构 (20)z目标板上的uclinux目录结构 (20)z主机上的uclinux-dist目录结构 (21)2、如何实现启动uclinux后自动运行某一程序(rc文件分析) (28)附录 (29)附录A vi使用方法简介 (29)附录B uClinux中断号 (32)一、嵌入系操作系统uClinux的简述操作系统是管理计算机上的资源,为用户使用计算机及其外部设备提供最基本接口的程序。
自从计算机诞生以来,随着计算机、网络技术的快速发展,操作系统一直处于不断发展和改进之中,人们将越来越多的功能加入到操作系统中,导致操作系统越来越大。
但是,随着应用领域的扩大,为了适应不同的应用场合,考虑到系统的灵活性、可伸缩性以及可裁减性,一种以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗要求严格的专用计算机系统---嵌入式操作系统便随之延生。
uClinux是嵌入式Linux的一个分支,所以我们首先来了解一下嵌入式Linux 的特性。
嵌入式Linux是按照上面所说的嵌入式操作系统的要求设计的一种小型操作系统。
由一个kernel(内核)及一些根据需要进行定制的系统模块组成。
其Kernel很小,一般只有几百K左右,即使加上其它必要的模块和应用程序,所需的存储空间也很小,有些还有具有实时性,如Rtlinux。
Uclinux内核编译傻瓜教程插曲:SDT下程序调适经验在SDT工程下面的.alf文件都是库文件,有了这些库文件后与之相对应的.c 原文件就不需要加载进入工程,否则会导致工程调试时出现程序跑飞的情况。
比方说如果已经加入了44blib.alf文件,则不需要再加入44blib.c文件,如果加入程序通过jtag调试必然跑飞,去掉则没有问题!当然在ADS中是没有.alf库文件的,那么就需要加入相应的.c文件!!内核的编译过程我想大家都知道了,就是make menuconfig进入内核配置菜单进行删改,结束保存后进行make depmake cleanmake lib_onlymake user_onlymake romfsmake imagemake基本上按照立宇泰给的uclinux内核文件和交叉编译器就能够完成整个编译内核的工作,只不过也许由于内核版本不同会产生一些不同的结果,主要还是功能方面的!此次编译内核需要完成的功能包括文件系统ext2的挂载,网络驱动,基本的cash命令,lcd frambuffer功能,串口功能。
当然你也可以实现更多的文件系统的挂载识别和更多驱动功能,但是内核及文件系统必然增大,这里只是实现基本的一些驱动功能,希望借此给各位一些帮助!1.编译armsys-c的uclinux内核及文件系统。
原先armsys-c的uclinux内核文件说明如下:没有经过压缩的内核文件大小为1.8M;经过压缩的内核为0.9M,其经过解压后进入SDRAM区后应该还是具有1.8M大小;文件系统大小为0.8M左右。
这里要注意的是必须按照手册上说的地址下载,否则uclinux无法启动,原因应该是其编译生成的内核文件及文件系统文件在编译过程中已经加入了ro-base及rm-base,所以程序启动的时候会相应寻找其地址,如果不对则无法启动。
不过我会通过重新编译内核时更改其值,验证设想!以下是下载imageram.bin的过程,内核下载后再下载romfsimag.bin即完成整个下载过程,并让程序Pc指向内核起始地址启动uclinux!启动好了的内核及文件系统:对内核进行删改,并于原内核进行比对,发现一些问题。
uClinux 启动顺序研究小组成员:陈伟静1061000255陈晓1061000256关然1061000260侯雪峰1061000261摘要:本文主要介绍了嵌入式系统uClinux的启动过程分析,并对相关的文件进行了注释说明,便于学习者更轻松容易的了解uClinux的启动过程和掌握改写的方法。
关键词:uClinux;启动顺序;kernel;start_kernel【Abstract】:This paper introduces uClinux embedded systems startup process analysis, and documents related to the explanatory notes to facilitate learners understanding easier uClinux startup process and to master the method of rewriting.【key word】:uClinux;Boot sequence; kernel; start_kernel引言:32位ARM嵌入式处理器具有高性能、低功耗、高性价比的特性,已被广泛应用于消费电子产品、无线通信、控制和网络通信等领域。
uClinux是专门为无MMU处理器设计的嵌入式操作系统,已支持ARM、Motorola等微处理器。
目前采用ARM+uClinux作为嵌入式系统的一种开发模式非常普遍。
一个基于uClinux的完整的嵌入式系统由三个部分组成,即系统引导程序Bootloader、uClinux操作系统内核和文件系统。
嵌入式系统的启动引导技术是嵌入式系统开发的一个难点,系统启动引导的成功与否决定了应用程序的运行环境是否能正确建立,系统启动成功是应用正确运行的前提。
而uClinux内核的启动过程也是其中重要一环,在不同的嵌入式系统中,即使处理器相同,uClinux的启动控制部分都会完全不同,所以分析uClinux的启动过程,可以加快系统启动速度、正确建立应用环境。
学习开发套件V3.0中嵌入Uclinux的步骤和方法在学习开发套件V3.0中嵌入Uclinux的步骤和方法,硬件系统为EP1C6,2Mflash,8Msdram.开发环境:SOPC学习开发套件V3.0,型号EP1C6。
QII5.1+SP2,NiosII IDE5.1+SP1。
一 .安装nios2linux开发包nios2linux-1.4二 .建立硬件系统1. QII中建一工程linux_nios,并添加NIOSII CPU,QII工程和平常的建立并没有什么区别,只要得加上flash和sdram,因为这里只是对linux的简单调试,所以SOPC中只添加LED和UART等几个简单外设。
如下图:注意为防止不必要的麻烦,这里尽量使用默认名字。
如果想用USB连接电脑,在QII中把串口连接到USB线的IO管脚上即可。
我们的工程中是两个口都接了,使用串口或者USB口都行。
三.建立软件环境打开NIOSII IDE3.1 建立linux内核file-> new-> project 后如下图:注意:在安装Microtronix_uclinux_nios2开发包后在IDE中分增加出如上图的Microtronix NiosII选项如果没有可以按下面方法解决:1)、打开cmd,在 开始->运行 那里输入cmd2)、cd到你的NiosII的工作目录下面,我的NiosII安装在D盘,如下:3)、在这里输入命令nios2-ide.exe –clean,进入NiosII IDE的clean模式,选择workspace:这是在New->Other那里你就可以看到那个linux的目录项了。
关了IDE窗口和cmd窗口,这样就可以正常看到Microtronix_linux了。
3.2 输入内核名字按next:finish完成四. 构建内核:4.1 右键内核名,在弹出菜单中选择Configure Kernel如下:后进入如下界面:因为flash只有2M因此构造的内核应尽可能的小,其大小不能超过1M。
uClinux 启动过程详细分析大家对uclinux的启动应该都比较熟悉,作为一名嵌入系统开发者,你一定遇到过下面的情景:在某论坛上看到一篇帖子,上面贴着uclinux开发板启动时的一堆信息,然后大家在帖子里讨论着这个启动过程中出现的问题,随机举例如下:Linux version 2.4.20-uc1 (root@Local) (gcc version 2.95.320010315 (release)(ColdFire patches - 20010318 from http://f(uClinux XIP and shared lib patches from /)) #20 三 6月 1 8 00:58:31 CST 2003Processor: Samsung S3C4510B revision 6Architecture: SNDS100On node 0 totalpages: 4096zone(0): 0 pages.zone(1): 4096 pages.zone(2): 0 pages.Kernel command line: root=/dev/rom0Calibrating delay loop... 49.76 BogoMIPSMemory: 16MB = 16MB totalMemory: 14348KB available (1615K code, 156K data, 40K init)Dentry cache hash table entries: 2048 (order: 2, 16384 bytes)Inode cache hash table entries: 1024 (order: 1,Mount-cache hash table entries: 512 (order: 0, 4096 bytes)Buffer-cache hash table entries: 1024 (order: 0, 4096 bytes)Page-cache hash table entries: 4096 (order: 2, 16384 bytes)POSIX conformance testing by UNIFIXLinux NET4.0 for Linux 2.4Based upon Swansea University Computer Society NET3.039Initializing RT netlink socketStarting kswapdSamsung S3C4510 Serial driver version 0.9 (2001-12-27) with no serial options en abledttyS00 at 0x3ffd000 (irq = 5) is a S3C4510BttyS01 at 0x3ffe000 (irq = 7) is a S3C451Blkmem copyright 1998,1999 D. Jeff DionneBlkmem copyright 1998 Kenneth AlbanowskiBlkmem 1 disk images:0: BE558-1A5D57 [VIRTUAL BE558-1A5D57] (RO)RAMDISK driver initialized: 16 RAM disks of 1024K size 1024 blocksizeSamsung S3C4510 Ethernet driver version 0.1 (2002-02-20) <mac@.tw>eth0: 00:40:95:36:35:34NET4: Linux TCP/IP 1.0 for NET4.0IP Protocols: ICMP, UDP, TCPIP: routing cache hash table of 512 buckets, 4KbytesTCP: Hash tables configured (established 1024 bind 1024)上面的这些输出信息,也可能包括你自己正在做的uclinux开发板的输出信息,其中的每一行,每一个字的含义,你是否深究过,或者说大部分的含义你能确切地知道的?本人想在这里结合本人在实践中一些体会来和广大uclinux的开发者一起读懂这些信息。
Linux/uClinux移植教程移植环境:PC主机一台:windows XP+SP3,虚拟机平台Vmware6.5,Linux平台:CentOS5.3操作系统,并且linux虚拟机可以访问互联网。
对于其它Linux操作系统,可能需要安装其它一些库文件,移植方法也大致相同。
步骤如下:1).安装EPEL开发包使用管理员帐号登陆CentOS5.3,下载安装EPEL开发包[root@localhost ~]#-Uvh /pub/epel/5/i386/epel-release-5-3.noarch.rpm[root@localhost ~]#yum install git-all git-gui make gcc ncurses-devel bison byacc flex \gawk gettext ccache zlib-devel gtk2-devel lzo-devel pax-utilslibglade2-devel完成后,会在linux机上装上gcc编译器(4.1版本),以及git server等其它工具。
2).检测cc编译器是否链接到gcc上[root@localhost ~]# which gcc[root@localhost ~]# gcc –v以及[root@localhost ~]# which cc[root@localhost ~]# cc -v如果两者内容相同,则已链接好。
如果不是:[root@localhost ~]# cd /usr/bin[root@localhost bin]# ln -s gcc cc3). 安装nios2-linux-20090730.tar开发包下载地址: /pub/uclinux/nios2-linux-20090730.tar可以在windows下下载,下载完后复制到linux的root根目录下。
校验压缩包是否完整:[root@localhost ~]# sha1sum nios2-linux-20090730.tar校验结果1d99a54d36759cc6ce5f054ff0460b1bd370b0b6 nios2-linux-20090730.tar解压到当前目录下,即root目录下:[root@localhost ~]# tar xf nios2-linux-20090730.tar进入nios2-linux目录:[root@localhost ~]# cd nios2-linuxCheckout源代码:[root@localhost nios2-linux]# ./checkout等checkout完成后,nios2-linux-20090730.tar安装完成4).生成nios的交叉编译工具toolschain如果您对linux比较熟悉,可以自己生成toolschain,这是一个漫长的过程,首先需要安装gcc4.3.3,安装完gcc后,[root@localhost nios2-linux]# cd toolchain-build # CD 到toolchain-build 目录[root@localhost toolchain-build]# gcc --version #查看gcc 版本[root@localhost toolchain-build]# git clean -f -x -d #清除编译缓存[root@localhost toolchain-build]# make gcc elf2flt gdb-host幸运地话,会在1到2个小时后完成,不过,这步出错率极高。
用AXD 在线调试uClinux-2.4.x操作系统用arm-elf-gdb可以在线调试uClinux下的应用程序,也可以仿真调试uClinux系统。
用AXD调试uClinux则简单易行。
用AXD调试uClinux所需主要文件有:images\image.ram、linux-2.4.x\linux和system.map。
image.ram将被AXD加载在实验板的SDRAM中执行;linux为AXD调试提供符号和函数等;system.map则提供给我们调试内容相关的符号和函数地址,可以用文本编辑器打开它查看。
在调试过程中,如果要查看所有的源文件,则必须要有相应的文件,可以把linux操作系统下的整个uclinux源文件子目录拷贝到windows操作系统下。
具体调试过程:1、启动AXD,配置菜单项options->configure target为希望的调试方式。
如可选择ARMUL 项,这是由AXD提供的仿真环境,不需要额外的支持,就可以开始下面的调试了;也可选择支持在线调试的目标环境(Target enviorment),如用banyan支持包支持的简易Jtag 方式,但这以前,必须安装banyan支持包并启动banyan接口支持。
2、用菜单项system views->command line interface进入命令方式,重映射存储器,以使SDRAM定位在0x0地址。
注意:如上一步选择的是ARMUL仿真调试环境,则不用重映射存储器,因为仿真环境下的所有存储地址都是可写入的。
用菜单项options->configure processor项,关闭vector catch和semihosting,不用AXD捕获中断。
3、用菜单项file->load memory from file加载image.ram文件,注意加载地址(address)为0x8000。
用菜单项file->load debugger symbols加载linux文件。
嵌入式uCLinux内核启动过程分析
引言
uCLinux 是专门为无MMU 处理器设计的嵌入式操作系统,已支持ARM、Motorola 等微处理器。
目前采用ARM+uCLinux 作为嵌入式系统的一种开发模式非常普遍。
一个基于uCLinux 的完整的嵌入式系统由三个部分组成,即系统引导程序Bootloader、uCLinux 操作系统内核和文件系统。
嵌入式系统的启动引导技术是嵌入式系统开发的一个难点,系统启动引导的成功与否决定了应用程序的运行环境是否能正确建立,系统启动成功是应用正确运行的前提。
而uCLinux 内核的启动过程也是其中重要一环,分析uCLinux 的启动过程,可以加快系统启动速度、正确建立应用环境。
本文要研究的就是uCLinux 操作系统内核的启动过程。
1 系统简介
本系统采用SamSung 公司的Arm7TDMI 内核的S3C4510B 处理器,主要利用其强大的网络功能,与PC 机进行网络通信。
该系统的主要功能是利用串口监测一种智能电表,将获得的数据通过Internet 传给PC 机,由PC 机再做进一步的处理,将最终结果呈现给用户。
硬件平台包括一个以ARM 为内核的处理器、存储器使用2MB 的Flash 和16MB 的SDRAM,外部接口除了通信的串口,还外接了一个以太网接口,以支持S3C4510B 的网络功能。
软件平台由以下部分组成:系统引导程序Bootloader、嵌入式操作系统内核、文件系统。
根据内核是否压缩以及内核是否在本地执行,uCLinux 通常有两种启动方式:flash 本地执行方式和压缩内核加载方式。
本系统采用第二种启动方案,。
Uclinux内核配置与裁减×××××××××××××××××××××××××××××创建时间:08/01/17×创建人:叶振风×××××××××××××××××××××××××××××最后修改时间:×修改人:叶振风××××××××××××××××××××××××××××Uclinux的配置和裁减也是利用的华恒科技提供的源码包(用于hhbf531学习板)。
我们使用的开发板信息如下:CPU:BF533FLASH:S29AL004D-512KBSDRAM:HY57V281620-16MB这里我不敢说“uclinux的移植”,而只是以“配置与裁减”代之,是因为我觉得自己的工作真的谈不上什么移植。
现成的源码包,所有的底层驱动都已经完成,我们所要做的只是选择自己需要的驱动、配置一下内核、做一些裁减工作而已。
每每听到其他人提到“最近又完成了×××平台的linux移植”,我都会有点担心:国内有多少工程师能真正从最初始的工作开始,完成一个平台的系统移植——应该很少吧。
uClinux的移植包在ARMSYS上的使用说明(vol.20050101)目录1.下载与运行U C LINUX (2)1.1烧录Bootloader (2)1.1.1 fluted烧录工具的使用 (2)1.1.2 flashprgm工具的使用 (2)1.1.3 uClinux专用bootloader的功能项 (3)1.2下载image.ram,image.rom,romfs.img到开发平台 (4)1.2.1从SDRAM启动运行uClinux (4)1.2.2烧录到flashROM中运行 (6)2.配置与编译U C LINUX (7)2.1解压uClinux移植包 (7)2.2安装编译环境 (7)2.3配置和裁减uClinux (8)2.4编译uClinux (8)3.U C LINUX的应用开发 (8)3.1开发模式 (9)3.2调试方法 (9)本文将按步骤详细说明如何在ARMSYS开发平台上下载、烧录、运行uClinux的移植版;如何剪裁和配置uClinux内核和用户选项,如何编译uClinux源代码包,如何进行uClinux 应用开发等内容。
欢迎光临网站,查看uClinux移植与应用相关的最新技术文档。
1.下载与运行uClinux1.1烧录Bootloader【Bootloader概念】简单地说,Boot Loader 就是在操作系统内核运行之前运行的一段小程序。
通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。
在ARMSYS提供的配套光盘中,uClinux/Bootloader目录中包含一个Bootloader的二进制文件(bootloader.bin)和Bootloader工程源码。
要在ARMSYS上运行uClinux,首先要将Bootloader的二进制文件烧录到flash中,取代BIOS,令它在上电后即被运行。
ubuntu: uClinux终于可以跑在skyeye下了。
首先确保root用户,let's go.
1.install skyeye_1_2_2_Rel
代码:
$make
(note: refer to skyeye/README, gcc4.1.2)
2.install cross-compiler
代码:
$chmod 777 arm-elf-tools-20030314.sh
$./arm-elf-tools-20030314.sh
pile uClinux-dist-20060803
step1:
代码:
$make xconfig
(note:choose GDB/ARMulator,kernel2.4,ucLibc)
q: wish: Command not found,when make xconfig
a:need TK tookit package(TK8.4)
step2:
代码:
$make dep
step3:
代码:
$make
(成功后生成linux-2.4-x/linux,images/boot.rom和linux)
q:arm-linux-gcc: Command not found
a:change arm-linux- cross-compiler into arm-elf- in vendors/config/armnommu/config.arch
4.run the uClinux in skyeye
step1: add the skyeye.conf in director uClinux-dist/ skyeye.conf:
代码:
cpu: arm7tdmi
mach: at91
mem_bank: map=M, type=RW, addr=0x00000000, size=0x00004000
mem_bank: map=M, type=RW, addr=0x01000000, size=0x00400000 mem_bank: map=M, type=R, addr=0x01400000, size=0x00400000, file=./boot.rom
mem_bank: map=M, type=RW, addr=0x02000000, size=0x00400000 mem_bank: map=M, type=RW, addr=0x02400000, size=0x00008000 mem_bank: map=M, type=RW, addr=0x04000000, size=0x00400000 mem_bank: map=I, type=RW, addr=0xf0000000, size=0x10000000
step2: for file=./boot.rom in skyeye.conf
代码:
$ln -s images/boot.rom boot.rom
step2: run uClinux
代码:
$skyeye -e linux-2.4.x/linux
OK, >ls, 熟悉了吧,haha
q:backspace key is not suppot in uClinux?
a:ctrl+H
q:loading is stoped when $skyeye linux?
a:$skyeye -e linux, because the file:linux is ELF image. note: 其他版本未测试,google应该能g出来,hehe。