
既然有了 *** 作系统Linux,开机启动就由 *** 作系统来管理,是不是arm无所谓,是不是嵌入式系统没关系 Linux几个版本有点区别,不过大致都一样,就是添加开机启动脚本,通过脚本调用自己的程序。 开机启动脚本在etc下rc0d rc1d rc2d 命名格式
跟目录下的bin,是系统工具,一般属于超级用户才具有使用权限,而usr下面的bin则是普通用户和你自己安装的一些软件工具通用的存放路径。bin进行二进制可执行文件的意思。存放的当然都是可执行的工具了。如果是源码包安装的话,你可以通过configure来指定安装路径。
Linux正在嵌入式开发领域稳步发展。因为Linux使用GPL(请参阅本文后面的参考资料),所以任何对将Linux定制于PDA、掌上机或者可佩带设备感兴趣的人都可以从因特网免费下载其内核和应用程序,并开始移植或开发。许多Linux改良品种迎合了嵌入式/实时市场。它们包括RTLinux(实时Linux)、uclinux(用于非MMU设备的Linux)、MontavistaLinux(用于ARM、MIPS、PPC的Linux分发版)、ARM-Linux(ARM上的Linux)和其它Linux系统
嵌入式Linux开发大致涉及三个层次:引导装载程序、Linux内核和图形用户界面(或称GUI)。引导装载程序通常是在任何硬件上执行的第一段代码。在象台式机这样的常规系统中,通常将引导装载程序装入主引导记录(MasterBootRecord,(MBR))中,或者装入Linux驻留的磁盘的第一个扇区中。通常,在台式机或其它系统上,BIOS将控制移交给引导装载程序。
专用软件可以直接与远程系统上的闪存设备进行交互并将引导装载程序安装在闪存的给定位置中。闪存设备是与存储设备功能类似的特殊芯片,而且它们能持久存储信息—即,在重新引导时不会擦除其内容。
某些种类的嵌入式设备具有微小的引导代码—根据几个字节的指令—它将初始化一些DRAM设置并启用目标上的一个串行(或者USB,或者以太网)端口与主机程序通信。然后,主机程序或装入程序可以使用这个连接将引导装载程序传送到目标上,并将它写入闪存。设置工具链在主机机器上创建一个用于编译将在目标上运行的内核和应用程序的构建环境—这是因为目标硬件可能没有与主机兼容的二进制执行级别。
工具链由一套用于编译、汇编和链接内核及应用程序的组件组成。这些组件包括:Binutils—用于 *** 作二进制文件的实用程序集合。它们包括诸如ar、as、objmp、objcopy这样的实用程序。G—GNUC编译器。Glibc—所有用户应用程序都将链接到的C库。避免使用任何C库函数的内核和其它应用程序可以在没有该库的情况下进行编译。构建工具链建立了一个交叉编译器环境。本地编译器编译与本机同类的处理器的指令。交叉编译器运行在某一种处理器上,却可以编译另一种处理器的指令。重头设置交叉编译器工具链可不是一项简单的任务:它包括下载源代码、修补补丁、配置、编译、设置头文件、安装以及很多很多的 *** 作。另外,这样一个彻底的构建过程对内存和硬盘的需求是巨大的。如果没有足够的内存和硬盘空间,那么在构建阶段由于相关性、配置或头文件设置等问题会突然冒出许多问题。
因此能够从因特网上获得已预编译的二进制文件是一件好事(但不太好的一点是,它们大多数只限于基于ARM的系统,但迟早会改变的)。一些比较流行的已预编译的工具链包括那些来自Compaq(FamiliarLinux)、LART(LARTLinux)和Embedian(基于Debian但与它无关)的工具链—所有这些工具链都用于基于ARM的平台。从用户的观点来看,图形用户界面(GUI)是系统的一个最至关重要的方面:用户通过GUI与系统进行交互。所以GUI应该易于使用并且非常可靠。但它还需要是有内存意识的,以便在内存受限的、微型嵌入式设备上可以无缝执行。所以,它应该是轻量级的,并且能够快速装入。
另一个要考虑的重要方面涉及许可证问题。一些GUI分发版具有允许免费使用的许可证,甚至在一些商业产品中也是如此。另一些许可证要求如果想将GUI合并入项目中则要支付版税。
最后,大多数开发人员可能会选择XFree86,因为XFree86为他们提供了一个能使用他们喜欢的工具的熟悉环境。但是市场上较新的GUI,象CenturySoftware的(Nano-X)和TrolltechQT/Embedded,与X在嵌入式Linux的竞技舞台中展开了激烈竞争,这主要是因为它们占用很少的资源、执行的速度很快并且具有定制窗口构件的支持。
Linux驱动程序的使用可以按照两种方式编译,一种是静态编译进内核,另一种是编译成模块以供动态加载。由于uClinux不支持模块动态加载,而且嵌入式LINUX不能够象桌面LINUX那样灵活的使用insmod/rmmod加载卸载设备驱动程序,因而这里只介绍将设备驱动程序静态编译进uClinux内核的方法。
下面以UCLINUX为例,介绍在一个以模块方式出现的驱动程序testc基础之上,将其编译进内核的一系列步骤:
(1) 改动testc源带代码
第一步,将原来的:
#include
#include
char kernel_version[]=UTS_RELEASE;
改动为:
#ifdef MODULE
#include
#include
char kernel_version[]=UTS_RELEASE;
#else
#define MOD_INC_USE_COUNT
#define MOD_DEC_USE_COUNT
#endif
第二步,新建函数int init_test(void)
将设备注册写在此处:
result=register_chrdev(254,"test",&test_fops);
(2)将testc复制到/uclinux/linux/drivers/char目录下,并且在/uclinux/linux/drivers/char目录下memc中,int chr_dev_init( )函数中增加如下代码:
#ifdef CONFIG_TESTDRIVE
init_test();
#endif
(3)在/uclinux/linux/drivers/char目录下Makefile中增加如下代码:
ifeq($(CONFIG_TESTDRIVE),y)
L_OBJS+=testo
Endif
(4)在/uclinux/linux/arch/m68knommu目录下configin中字符设备段里增加如下代码:
bool 'support for testdrive' CONFIG_TESTDRIVE y
(5) 运行make menuconfig(在menuconfig的字符设备选项里你可以看见我们刚刚添加的'support for testdrive'选项,并且已经被选中);make dep;make linux;make linuxtext;make linuxdata;cat linuxtext linuxdata > linuxbin。
(6) 在 /uclinux/romdisk/romdisk/dev/目录下创建设备:
mknod test c 254 0
并且在/uclinux/appsrc/下运行make,生成新的Romdisks19文件。
到这里,在UCLINUX中增加设备驱动程序的工作可以说是完成了,只要将新的linuxbin与Romdisk
1、安装jdk
jdk(java development kit)即java开发包,其中包含了运行eclipse所需要的jre ubuntu缺省安装的gnu版本的jre运行效率不高,所以需要安装sun公司的jre 首先从sun的网站上下载安装包jdk-6u7-linux-i586bin,然后如下进行安装:
# mkdir -p /opt/java
# /jdk-6u7-linux-i586bin // 执行自解压文件,生成目录
# mv jdk160_07 /opt/java // 把目录移到/opt/java下
# cd /opt/java
# ln -s jdk160_07 jdk
# mv /etc/alternatives/java /etc/alternatives/javagnu
# ln -s /opt/java/jdk/bin/java /etc/alternatives/java
# export JAVA_HOME=/opt/java/jdk // 设置环境变量
2、安装eclipse和cdt
从eclipse网站上下载安装包eclipse-SDK-34-linux-gtktargz 和cdt-master-500zip
# cd /opt
# tar zxvf eclipse-SDK-34-linux-gtktargz // 解压生成eclipse目录
# export PATH=/opt/eclipse:$PATH
# mkdir -p /opt/cdt
# cd /opt/cdt
# unzip cdt-master-500zip
# cp -r plugins/ /opt/eclipse/plugins/
# cp -r features/ /opt/eclipse/features/
二、创建c/c++工程
假设已经在linux上安装好了arm交叉工具链,下面介绍如何创建、交叉编译和调试c/c++工程,进入eclipse安装路径后,运行eclipse。
创建c 工程
使用缺省的Linux GCC工具链
进入c/c++ 界面
添加源代码文件1
添加源代码文件2
编辑代码
设置工程属性,指定交叉工具链1
设置工程属性,指定交叉工具链2
设置工程属性,指定交叉工具链3
编译工程
已生成arm平台可执行代码
配置调试选项
设置Debugger和 GDB debugger选项
设置连接类型为TCP,目标板的ip地址和调试端口号。端口号任意指定,通常大于1024(避免和系统所用端口号冲突)
在开发板上运行程序,格式如上图所示:gdbserver是交叉调试辅助程序;1921680150是主机的ip地址;1234是调试端口号,和eclipse调试选项里设定的端口号要一致
点击Debug,进入调试界面
执行到断点
eclipse的调试界面和 *** 作和在windows下开发类似。
所需开发工具及环境
虚拟机Linux:Fedora 9
交叉编译工具:arm-linux-gcc-341tarbz2
集成开发工具:Eclipse(Linux安装包中自带的,安装Linux时选中安装)
安装ARM交叉编译器
1 安装。其实很简单,就是将下载的arm-linux-gcc-341tarbz2解压到Linux根目录即可(因为解压后已经包含了/usr/local目录,所以要解压到根目录),如下命令:
tar -jxvf arm-linux-gcc-341tarbz2 -C /
解压后的目录/usr/local/arm/341/
2 设置环境变量。就是把交叉编译器的路径设置到系统环境变量里面去。
echo $PATH
查看现有的环境变量
如果只想临时添加交叉编译器的环境变量(注:临时添加的系统重启或注销后又没有了),只需在命令行输入如下命令:
export PATH=$PATH:/usr/local/arm/341/bin
如果想这个环境变量永久的添加到系统的环境变量中,则你只需把这个命令添加到/root/bashrc文件的最后一行即可(这个文件是隐藏文件,你要在文件浏览器中单击查看菜单,勾选显示隐藏文件才能看到)
3 测试建立的交叉编译环境。新建一个c程序,文件名:testc, 如下:
#include <stdioh>
int main(void)
{
printf("Hellow world!\n");
return 0;
}
进行交叉编译,如下:
arm-linux-gcc -o test testc
将交叉编译好的目标文件test下载到ARM开发板中并运行,如下:
/test
输出结果为:
Hellow world!
用集成开发工具Eclipse来开发嵌入式应用程序
双击Eclipse图标启动Eclipse
设置Eclipse的工作空间,就是选个目录,单击OK
启动后的主界面
开始新建一个应用程序工程
选择新建一个C工程,单击Next
给工程取个名字,这里我就叫test_app;然后选择工程类型,我选择了个Hellow world C工程模版,单击Next
填写作者、版权等信息,单击Next
没什么选的,点击Finish
单击Yes
新建好的项目工程
展开左边的源代码目录,双击打开主函数。这里只是输出一句"Hello World!!!",你可以做一些其他复杂的应用
单击Project菜单,去掉Build Automatically的勾选,因为勾选的话,每次修改一个地方工程都会自动进行编译
打开工程的属性对话框进行编译选项的设置
我们的应用程序最终要到嵌入式arm上运行,这里就要把gcc改成arm-linux-gcc编译器,当然前提是你要在你的开发主机上先安装arm-linux-gcc
C连接器也要改成arm-linux-gcc
这里的Libraries是设置你的应用程序中用到的库文件,比如应用程序中用到了线程类,则这里在上面添加pthread这个库,下面就添加这个库的路径。如果应用程序没用到任何库文件就不用管了
选中左侧的工程名,右键,在d出的菜单中选择Build Project编译工程
编译好后的工程,目标文件在Debug目录下
以上就是关于嵌入式 linux 执行应用程序 有几个pid全部的内容,包括:嵌入式 linux 执行应用程序 有几个pid、嵌入式Linux,更新应用程序到板子上时,不想动根文件系统,只更新应用程序,要怎么个烧录法、嵌入式设备的嵌入式设备上的Linux系统开发_嵌入式linux应用等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)