uClinux平台开发入门

合集下载

Linux应用开发入门(转)

Linux应用开发入门(转)
山高月晓 水落石出——IDE后台的故事 GCC篇 前面我们简要介绍了一些IDE环境,其中所有C/C++相关程序的编译都是由GCC来完成的,而IDE只不过起到了一个收集编译信息和为我们 的项目生成makefile等作用(后面我们会提到)。出于目前Linux开发的特点,C仍是系统开发的主流语言。所以,对GCC有一个全面的了解 是很有必要的,一旦IDE不能满足你的需求,我们要有手工打造程序的能力,而且出于学习的目的,我们往往不需要IDE生成的那些复杂的 文件,为一个Hello world生成2M多的文件显然是多余的。 GCC的全称是GNU Compiler Collection,从这个名字我们不难看出,GCC代表着一个编译器的集合,目前GCC可以支持C, C++, ObjectiveC, Objective-C++, , Java, and Ada等语言。但是出于一般性考虑,我们这里只讨论GCC中的C/C++部分。 目前GCC的最新发布版是4.0.0,但是这个版本由于使用了新技术和新的编码规范,很多旧的代码都需要修改才可以通过编译,所以并不推 荐使用这个版本。而相对稳定的新版本目前是3.4.4,大家可以到GNU的主页上更新下载。那么究竟GCC强大在哪里,如何使用?下面我就 通过几个简单而实际的例子带你看看GCC提供的强大功能。
在那里结束。
-o output- 用来指定输出文件,该选项可以指定很多种输出文件,例如:可执行文件、目标文件、汇编文件或者是预处理过的程序代码等,
file
这要根据具体的命令行参数而定。当然,GCC还提供了默认的-o选项,其中,默认的可执行文件是a.out,目标文件是
<file_name>.o,汇编文件是<file_name>.s,预编译头文件的格式是<file_name>.suffix.gch

uclinux学习

uclinux学习

深入
Why
Why
嵌入式
Why ? 全球每
Why ?(cont.)
Embedded Linux/Microcontroller Project What is ?
uCLinux
已成功使用
内存管理
uClinux同标准Linux的最大区别就在于内存管理
标准
uCLinux
标准Linux系统系统数据段,代码段,堆和栈在虚存层面是连续的。

堆向上增长,栈向下增长,在堆底和栈顶之间有256MB的内存可供分配。

uClinux 采用了实内存模式,各个内存段在物理内存层面是连续的,栈段在同数据段在一起,堆有系统内存管理,所有进程共享,由于内存连续和保护的要求,栈段,数据段,代码段都是在程序加载是分配。

这种内存空间布局阻碍了动态连接库的运用。

栈段的大小固定(在生成应用时可以指定栈段大小),开发人员在开发时不得不使用一些方法估计判断栈段的大小,使其即能满足程序的需要,又不浪费内存。

标准
uClinux
的开发利
入研究应用LINUX技术的理想的软硬件平台!可用于掌上
参考文档。

uClinux 的编译和运行

uClinux 的编译和运行

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的内核结构和开发环境

嵌入式uClinux的内核结构和开发环境

嵌入式uClinux的内核结构和开发环境时间:2009-05-12 23:27来源:Linux Website 作者:admin 点击: 900次1 引言嵌入式操作系统是嵌入式系统的灵魂,而且在同一个硬件平台上可以嵌入不同的嵌入式操作系统。

比如ARM7TDMI内核,可以嵌入Nucleus、VxWorks、uClinux等操作系统。

在此主要对uClinux的1 引言嵌入式操作系统是嵌入式系统的灵魂,而且在同一个硬件平台上可以嵌入不同的嵌入式操作系统。

比如ARM7TDMI内核,可以嵌入Nucleus、VxWorks、uClinux 等操作系统。

在此主要对uClinux的进行介绍,嵌入式uClinux操作系统主要有三个基本部分组成:引导程序、uClinux内核(由内存管理、进程管理和中断处理等构成)和文件系统。

uClinux可以通过定制使内核小型化,还可以加上GUI(图形用户界面)和定制应用程序,并将其放在ROM、RAM、FLASH或Disk On Chip中启动。

由于嵌入式uClinux操作系统的内核定制高度灵活性,开发者可以很容易地对其进行按需配置,来满足实际应用需要。

又由于uClinux是源代码公开,因此开发人员只有了解内核原理就可以自己开发部分软件,例如增加各类驱动程序。

下面将详细分析嵌入式操作系统uClinux。

2 嵌入式uCinux内核结构uClinux内核结构如图1所示:图1代表了内核的功能结构,与Linux基本相同,不同的只是对内存管理和进程管理进行改写,以满足无MMU处理器的要求。

uClinux是Linux 操作系统的一种,是由Linux2.0内核发展来的,是专为没有MMU的微处理器(如ARM7TDMI、Coldfire 等)设计的嵌入式Linux操作系统。

另外,由于大多数内核源代码都被重写,uClinux的内核要比原Linux 2.0内核小的多, 但保留了Linux 操作系统的主要优点:稳定性,优异的网络能力以及优秀的文件系统支持。

ARM应用系统开发详解—嵌入式uClinux及应用开发

ARM应用系统开发详解—嵌入式uClinux及应用开发

第7章嵌入式uClinux及其应用开发本章从构建一个针对S3C4510B硬件平台的嵌入式uClinux操作系统和在其上进行应用程序的开发入手,逐步讲述如何在Linux环境下编写用户应用程序的方法和步骤,并为熟悉Windows操作系统的用户介绍在这种平台之上,使用何种工具编写和编译自己的应用。

通过本章的学习,读者可以对嵌入式uClinux有一定的了解,并且掌握在Linux和Windows 下嵌入式系统应用开发的基本方法。

本章主要内容有:-嵌入式uClinux系统概况-开发工具GNU的使用-建立uClinux开发环境-在uClinux下开发应用程序7.1 嵌入式uClinux系统概况在PC机上开发应用程序的用户都会有这样的感觉,PC机有完善的操作系统并提供应用程序接口(API),开发好的应用程序可以直接在操作系统上运行。

虽然嵌入式系统的应用程序完全可以在裸板上运行,但为了使系统具有任务管理、定时器管理、存储器管理、资源管理、事件管理、系统管理、消息管理、队列管理和中断处理的能力,提供多任务处理,更好的分配系统资源的功能,用户就需要针对自己的硬件平台和实际应用选择适当的嵌入式操作系统(Embedded Operating System,以下简称EOS)。

本节将结合本书所谈到的硬件平台S3C4510B,介绍一种针对不带MMU的ARM微处理器的嵌入式操作系统uClinux。

uClinux是一个完全符合GNU/GPL公约的操作系统,完全开放代码,现在由Lineo公司支持维护。

uClinux的发音是“you-see-linux”,它的名字来自于希腊字母“mu”和英文大写字母“C”的结合。

“mu”代表“微小”之意,字母“C”代表“控制器”,所以从字面上就可以看出它的含义,即“微控制领域中的Linux系统”。

为了降低硬件成本及运行功耗,有一类CPU在设计中取消了内存管理单元(Memory Management Unit,以下简称MMU)功能模块。

嵌入式os-uclinux 软件开发环境的建立及应用程序开发模式

嵌入式os-uclinux 软件开发环境的建立及应用程序开发模式

嵌入式OS-uClinux软件开发环境的建立及应用程序开发模式How-To Porting uClinux to ColdFire 5272 Microprocessor And Developing User’s Applications张东卫 毛玉良 刘伟平 潘淳Zhang,Dongwei Mao,Yuliang Liu,Weiping Pan,Chun摘要:本文介绍了在mcf5272嵌入式硬件开发板基础上如何移植uClinux操作系统以及开发用户应用程序的基本模式。

关键词:嵌入式系统;操作系统内核;uClinux ;mcf5272;dBug中图分类号 : TP316 . 81文献标识码 : BAbstract: This article introduces an approach of porting uClinux to ColdFire 5272 microprocessor and the basic mode of developing user’s applicationsKeywords: Embedded System; Kernel of OS; uClinux; mcf5272;dBug0 引言近年来,随着电子技术的不断进步,嵌入式系统开发已成为热点。

作为嵌入式操作系统之一的uClinux以其内核小,效率高,源代码开放,内含完整的TCP/IP网络协议等优点,正日益被人们看好。

uClinux很适合在32位嵌入式系统中使用,它的代码公开、免费两大特性更是深受广大嵌入式开发爱好者的喜爱。

1 嵌入式操作系统uClinux简介uClinux是Linux的一个嵌入式版本,它是源代码开放的嵌入是操作系统,其内核的二进制映像文件可以做到小于512K。

目前越来越多的应用于嵌入式设备。

uClinux针对无MMU(Memory Management Unit,内存管理单元)的处理器设计,支持多任务,具有完备的TCP/IP协议栈并支持多种网络协议。

uCLinux开发平台构建

uCLinux开发平台构建
Linux版本众多,各版本之间存在差异,我 们这里使用的是Ubuntu10.10。 ✓ 由于目标板平台处理器是ARM,因而需要 安装GCC针对ARM的编译器。适用于 uCLinux的编译器为arm-elf-gcc。
Arm-elf-gcc安装步骤
安装CLinux
配置CLinux
配置CLinux和文件系统
➢ 串口终端,可以是Linux的minicom。亦可以是 Windows的超级终端。目标机可以看成一台计算 机,串口终பைடு நூலகம்就相当于这台计算机的显示器,作 为人机交互界面。在宿主机编译链接后得到的可 执行文件,下载到目标机上运行。
建立交叉开发环境
建立开发环境 ✓ 宿主机是运行Linux的PC或者服务器。由于
CLinux 开发平台构建
目录
➢ uCLinux简介 ➢ SmartARM2200开发平台简介 ➢ 宿主机和目标机 ➢ 建立交叉开发环境 ➢ 下载uCLinux内核到开发板 ➢ 启动uCLinux
uCLinux简介
Linux是一种很受欢迎的操作系统,它与UNIX系统兼容, 开放源代码。它原本被设计为桌面系统,现在广泛应用于 服务器领域。而更大的影响在于它正逐渐的应用于嵌入式 设备。uClinux正是在这种氛围下产生的。
连接成功
选择传输文件
文件传输完成
在Windows下通过超级终端启动CLinux
将串口0和PC机串口相连,打开uCLinux超级终 端,按下开发板复位键RST,在超级终端会显示 开发板的启动信息。
选择1以用户自行设定的IP进行FTP连接,可用于 下载文件。
选择2以出厂默认IP(192.168.15.115)进行FTP 连接,可用于下载文件。
烧写ZLG/BOOT

uClinux学习笔记之三

uClinux学习笔记之三

其中mydevice,c,254,0就是我们添加的内容,各项的含义分另是: mydevice :设备名
c 254 0
:字符设备 :主设备号 :副设备号
下面来看看我们的测试程序: //----------------------------------hello.c-------------------------------------#include <sys/types.h> #include <sys/stat.h> #include <stdio.h> #include <fcntl.h> int main(void) { int fd,num; fd = open("/dev/mydevice",O_RDWR,S_IRUSR | S_IWUSR); if(fd != -1 ) { read(fd,&num,sizeof(int)); printf("The globalvar is %d /n",num); printf("please input the num written to globalvar /n"); scanf("%d",&num);
printk("unable to get major %d for memory devs/n", MEM_MAJOR); memory_devfs_register(); rand_initialize(); #ifdef CONFIG_MYDEVICE mydevice_init(); #endif #ifdef CONFIG_I2C i2c_init_all(); #endif
uClinux学习笔记之三 uClinux驱 动开发初步
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Linux命令
帐号,进程管理 :useradd, groupadd, passwd, chgrp, who, lastchmod, chatrr, ps, top, uptime
file mode:rwxrwxrwx,777,s,t
文件和磁盘操作:ls, cp, cd, pwd, mv, rm, rmdir, mkdir, cat, less, more, echo df, du, fdformat, ln, head, tail, wc, find, grep
-Idirectory 在包含文件搜索路径的起点处添加指定目录; -llibrary 提示链接程序在创建最终可执行文件时包含指定的库; -O、-O2、-O3 将优化状态打开,该选项不能与-g选项联合使用; O2、 将优化状态打开,该选项不能与-S -v 要求编译程序生成来自源代码的汇编程序输出; 启动所有警报;
d 目录 ,l 符号链接,b 块设备文件,c 字符设备文件
网络命令: ping, traceroute, netstat, route, ftp, ssh, telnet 防火墙命令:iptables, ebtables 网络服务:DHCP, PPPoE, Samba, FTP, TFTP, Sendmail, IGMP. 集成服务:BUSYBOX
Shell语法
. if-then-else 语句 if command_1 then command_2 else command_3 fi 函数名 ( ) { 命令 }
for var1 in list Case string1 in str1) do commands;; commands str2) done commands;; *) while expression commands;; do esac statements done
VI基本概念
1) 命令行模式command mode)
控制屏幕光标的移动,字符、字或行的删除,移 动复制某区段及进入Insert mode下,或者到 last line mode。
2) 插入模式(Insert mode)
3) 底行模式(last line mode)
只有在Insert mode下,才可以做文字输入,按 「ESC」键可回到命令行模式。
Linux配置目录
总体目录 /dev — 设备 /proc — proc 文件 /etc — 系统配置 /sbin — 系统程序 /bin — 应用程序 /lib — 共享函数库 /mnt — 装载其他磁 盘节点 /usr — 附加应用程 序
基本配置 /etc/sysconfig/network-scripts/ 网络脚本相关 /etc/init.d 各种服务 /etc/rc.d/init.d/ start | stop | status /etc/rc.d/rc.local 可以从 rc、rc.sysinit 或 /etc/inittab 调用。 /etc/rc.d/rc.sysinit 通常是所有运行级别的第一个脚 本。 /etc/issue & /etc/ 这些文件由 mingett(和 类似的程序)读取,用来向从终端(issue)输出 welcom消息 /etc/protocols 列举当前可用的协议 /etc/inetd.conf 服务配置文件 /etc/services 将网络服务名转换为端口号/协议。 / etc/syslogd.conf syslogd 守护进程的配置文件。 ~/.bash_profile 由 bash 登录 shell 引用 /etc/profile 之后引用。
Shell实例
#! /bin/bash # Bring down all unneeded services that are still running case "$1" in start) ;; *) echo "Usage: $0 {start}" exit 1 esac for i in /var/lock/subsys/* ; do # Check if the script is there. [ -f "$i" ] || continue # Get the subsystem name. subsys=${i#/var/lock/subsys/} # Networking could be needed for NFS root. [ $subsys = network ] && continue # Bring the subsystem down. if [ -f /etc/init.d/$subsys.init ]; then /etc/init.d/$subsys.init stop elif [ -f /etc/init.d/$subsys ]; then /etc/init.d/$subsys stop else rm -f "$i" fi done
Shell编程
shell是用户和Linux操作系统之间的接口,它是 命令语言、命令解释程序及程序设计语言的统 称。用户在提示符下输入的命令都由shell先加 以解释,然后再传给linux核心。Shell的另一个 重要特性是它自身就是一个解释型的程序设计 语言,shell程序设计语言支持函数、变量、数 组和程序控制结构等。Linux中有多种shell,如 ash、bash、csh等,其中默认的是bash 。 在shell程序中,如果以“#!”开头,则“#!”后面所 跟的字符串就是所使用的外壳的绝对路径名, 第一行表明在此程序中我们使用的是bash外 壳。
Hale Waihona Puke Shell变量# count=5 #echo $count $HOME 用户自己的目录。 $PATH 执行命令时所搜寻的目录。 $PS1 在外壳命令行的提示符。 $PS2 当命令尚未打完时,外壳要求再输入时的提示符 $# 存储外壳程序中命令行参数的个数。 $? 存储上一个执行命令的返回值。 $0 存储外壳程序的程序名。 $* 存储外壳程序的所有参数。 $$ 存储外壳程序的P I D。 $! 存储上一个后台执行命令的P I D。
uClinux环境
运行uClinux的硬件平台主要包括如下几个部 分:cpu(ARMv4指令集兼容)、uart、memory controller、定时器、flash存储器,sdram存储 器,中断控制器和DMA。 为了在PC上编译得到运行于目标CPU上的操作 系统内核,还必须安装一个合适的交叉编译 器。Gcc 提供了现成的针对MIPS、ARM、 M68K、Sharc、PowerPC的交叉编译器。如果 没有现成的交叉编译器,则需要自行设计。
Gcc
Gcc编译器能将C、C++语言源程序、汇程式化序和目标程序编 译、连接成可执行文件,如果没有给出可执行文件的名字,gcc 将生成一个名为a.out的文件。在Linux系统中,可执行文件没有统 一的后缀,系统从文件的属性来区分可执行文件和不可执行文 件。而gcc则通过后缀来区别输入文件的类别,下面我们来介绍 gcc所遵循的部分约定规则。 .c为后缀的文件,C语言源代码文件; .a为后缀的文件,是由目标文件构成的档案库文件; .C,.cc或.cxx 为后缀的文件,是C++源代码文件; .h为后缀的文件,是程序所包含的头文件; .i 为后缀的文件,是已经预处理过的C源代码文件; .ii为后缀的文件,是已经预处理过的C++源代码文件; .m为后缀的文件,是Objective-C源代码文件; .o为后缀的文件,是编译后的目标文件; .s为后缀的文件,是汇编语言源代码文件; .S为后缀的文件,是经过预编译的汇编语言源代码文件。
Gcc
Linux系统下的Gcc(GNU C Compiler)是GNU推出的 功能强大、性能优越的多平台编译器,是GNU的代 表作品之一。gcc是可以在多种硬体平台上编译出 可执行程序的超级编译器,其执行效率与一般的 编译器相比平均效率要高20%~30%。 虽然我们称Gcc是C语言的编译器,但使用gcc由C 语言源代码文件生成可执行文件的过程不仅仅是 编译的过程,而是要经历四个相互关联的步骤∶ 预处理(也称预编译,Preprocessing)、编译 (Compilation)、汇编(Assembly)和连接(Linking)。
将文件保存或退出vi,也可以设置编辑环境,如 寻找字符串、列出行号……等。
Vi命令行模式功能键
[i]键 ,进入插入模式 [a]键,进入插入模式后,是从目前光标所在位置的下一个位置开始输入文字; [0]键进入 插入模式后,是插入新的一行,从行首开始输入文字。 [ESC]键 ,进入命令模式 「dd」:删除光标所在行。 「#dd」:从光标所在行开始删除#行 「yy」:复制光标所在行到缓冲区。 「#yy」:例如,「6yy」表示拷贝从光标所在的该行"往下数"6行文字。 「p」:将缓冲区内的字符贴到光标所在位置。注意:所有与“y”有关的复制命令都必须 与“p”配合才能完成复制与粘贴功能。 「u」:如果您误执行一个命令,可以马上按下「u」,回到上一个操作。按多次"u"可 以执行多次回复。 : w filename (输入 「w filename」将文章以指定的文件名filename保存) : wq (输入「wq」,存盘并退出vi) : q! (输入q!, 不存盘强制退出vi) 按「ctrl」+「b」:屏幕往"后"移动一页。 按「ctrl」+「f」:屏幕往“前”移动一页。 按「G」:移动到文章的最后。 按「$」:移动到光标所在行的“行尾”。
uClinux 平台开发入门
Gavin 武汉东讯科技有限公司
提纲
Linux介绍和启动配置 Linux命令 SHELL编程 Vi编辑器 GCC和交叉编译器 Makefile的工作原理和工作方式 Makefile的语法以及实例讲解 SVN 使用
相关文档
最新文档