基于HK-2000 OEM的嵌入式Linux开发
嵌入式开发环境的建立
嵌入式Linux 开发环境一般由如下几部分构成:Linux 服务器(宿主机)、个人PC机、嵌入式目标板和将它们连接在一起的网络环境,其具体结构如图所示:
图 linux开发环境的结构
如图所示的嵌入式Linux 开发环境中,Linux 服务器作为嵌入式Linux 内核编译、应用程序编译的公共平台,一般由单独的一台PC 机充当,安装常用的桌面标准Linux 操作系统,如RedHat Linux 等。
工作站即为普通的局域网络计算机,可以是一台或多台,以支持小组项目开发,工作站一般安装常用的Windows 操作系统,仍然可以完成各种日常工作,当需要使用Linux 服务器资源时,可从工作站远程登录到Linux 服务器,以完成各项需要的操作。
嵌入式Linux 开发是宿主机—目标机(HOST-TARGET)交叉开发,这样你的系统编译工具要换成交叉编译工具,对于这个,你只需要指明它的路径即可,需要交叉开发环境,并且建立交叉编译环境:
你可以在HK-2000 的光盘中得到预先编译的交叉编译工具cross-2.95.3.tar.bz2。交叉编译工具一般由专门的机构负责维护,可以从网站http://www.arm.linux.org.uk上免费下载,当然得需要编译,网站上一般提供原码。以下描述已经编译好的交叉编译环境的建立过程:
首先以Root 身份在Linux 服务器上新建一个用于嵌入式Linux 开发的工作目录:/home/work,以后所有的开发工作都在这个目录下进行。
编译工具以压缩包的形式,文件名为:cross-2.95.3.tar.bz2,包括linux-arm-gcc编译器和一些实用程序,位于光盘的目录:Software\Linux\tools,我们要把交叉编译工具安装在Linux服务器的/usr/local/目录下。
当拿到压缩文件后,在Linux服务器的/usr/local目录新建子目录arm:
# cd /usr/local
# mkdir arm ;建立ARM目录
从PC机上通过FTP方式,将光盘中的文件cross-2.95.3.tar.bz2传输到Linux服务器的/usr/local/arm目录,然后以远程登录的方式,进行解压安装的操作:
# bunzip2 cross-2.95.3.tar.bz2
# tar jxvf cross-2.95.3.tar.bz2
当以上的工作完成以后,就会在当前目录生成一个名为2.95.3的子目录,表明交叉编译器已经成功安装到了/usr/local/arm下。进入/usr/local/arm/2.95.3子目录,列表查看目录所包含的内容。
# cd /usr/local/arm/2.95.3
# ls
Arm-linux bin include info lib man share test-if-write
嵌入式编译工具就安装在这个目录中,可以完成源代码的编译。
这样你的开发环境已经建立在/usr/local/arm/2.95.3/bin 下面,当然你需要使用的时候,应该指出编译器的位置。
嵌入式Linux内核的配置与编译
Linux之所以能成为一种流行的嵌入式操作系统,除具有功能强大、高性能、稳定性好以及源代码开发等优势以外,其最大的特点是Linux内核具有非常良好的结构,可由用户根据特定的系统需求,对内核进行配置或裁减,而这一特点恰恰满足了嵌入式应用的差异性需求。
嵌入式系统最大的特征是差异性,几乎每一个嵌入式应用都是唯一的,这种差异性体现在硬件方面,就表现为系统可以采用不同的微处理器架构,如X86、ARM、PowerPC、MIPS等,同时,即使采用同一种微处理器架构,不同生产商生产的微处理器也会有不小的差异,运行在这些嵌入式微处理器上的操作系统也会有所相同,因此,如何得到一个适合在某个特定的嵌入式系统上运行的Linux内核,是我们首先要解决的问题。
我们提供可以稳定运行在HK-2000的嵌入式Linux内核包,位于光盘目录:Develop\linux\source。
将该Linux内核源代码包linux-2.4.27.tar.gz拷贝到Linux服务器上我们约定的工作目录:/home/work,然后执行如下命令解压:
#tar zxvf linux-2.4.27.tar.gz
该命令执行完毕后,生成目录linux-2.4.27.tar.gz。进入该目录,我们进行随后的操作。
Linux内核的配置(或裁剪)是与嵌入式系统的应用需求相适应的。尽管Linux内核功能强大,支持的设备众多,但对于一个特定的嵌入式应用来说,可能只会使用到其中的部分功能,而对于其它不使用的部分,如果让它驻留在系统中,不但耗费系统资源,同时还会增加系统安全隐患,因此,内核配置的目的,就是保留系统需要的功能,去掉不必要的部分,使操作系统以最精简、最优化的状态运行。
Linux内核支持三种配置方式,第一种方式是基于命令行的问答方式,针对每一个内核配置选项会有一个提问,回答“y”包含该项功能,回答“n”则不包含该项功能。通过执行make config可以开始第一种方式。
第二种是菜单式的,用户可以在Linux服务器或网络中的某个工作站进行操作,执行make menuconfig命令以后,会出现一个配置菜单,通过该菜单可以很方便的进行内核的配置。
第三种方法也是采用菜单方式进行配置的,但必须在Linux服务器上执行。通过执行make xconfig可以开始第三种方式。
显然,三种方式的实质是相同的,我们通常使用第二种方式进行配置,这种方式简单明了,受条件制约小。
执行如下命令:
# make menuconfig
注意:该命令可能需要超级用户权限。
系统出现图所示的内核配置界面:
图 嵌入式Linux内核的配置界面
用户也许对配置选项的意义不是完全明白,可以先不用管他,我们已经对内核做了比较合理的配置,建议在开始接触时不要做修改。
当用户在根据自己的系统需求配置好内核,退出配置菜单时,需要保存修改后的内核配置,如图4-3所示。
图 嵌入式Linux内核配置保存界面
若用户选择不保存,则进行的所有配置操作无效,内核配置仍然为原来的状态,若选择保存,系统会在当前目录下生成一个.config文件,其后要进行的内核编译就是根据这个.config文件来进行条件编译以生成相应的可执行文件的。
当完成对Linux内核的配置以后,内核仍然以源代码的方式存在,不能直接下载到嵌入式系统运行,因此,需要对内核进行编译,生成最终可以在嵌入式系统上运行的可执行代码。
依次执行如下命令,对Linux内核进行编译:
#make clean ;该命令用于清除旧的编译文件
#make dep ;该命令用于生成系统相应的依赖文件
# ./automake
当你以极大的耐心执行完以上的步骤,如果运气不错的话,会在当前目录下生成内核压缩映象文件uImage,好啦,停下来喘口气吧!
在HK-2000上开发Linux应用程序
前面章节描述了如何组建一个基本的平台:基于AT91RM200的硬件系统和嵌入式操作系统Linux,而最终完成的我们的具体任务的工作是由应用程序来承担的,有了嵌入式操作系统,你就可以像在PC平台上一样,实现各种功能强大的应用。
本节的内容,就是描述如何在HK-2000的Linux操作系统上,完成一个最简单的应用程序。
4.3.1 Linux应用程序的开发流程
基于嵌入式Linux的应用程序开发流程,与基于Windows的应用程序开发有很大的不同。在Windows环境中,开发者习惯使用各种集成编译开发环境,完成程序编辑、编译和运行。
而在Linux下开发应用程序,目前还缺乏比较简单、高效的开发工具和手段,同时,由于应用程序的最终运行平台是嵌入式目标系统,但程序开发仍然需要在PC+Linux平台完成,因此,在程序的开发与调试过程中,需要频繁的在Linux服务器和嵌入式目标平台交换信息。由于以上这些原因,基于嵌入式Linux的应用程序开发,还是一个相对比较复杂的过程,但随着嵌入式Linux的推广使用,基于嵌入式Linux应用程序的开发会变得越来越方便和容易。
有几种开发模式可以用于基于嵌入式Linux应用程序的开发,但最常用的方式有如下两种,即FTP方式和NFS方式。
1. FTP方式
FTP方式是首先在Linux服务器上编辑源文件,然后交叉编译,最后生成可执行文件,并将生成的可执行文件通过FTP方式下载到嵌入式目标系统上运行。
因此,当开发者在Linux服务器上完成了应用程序的编辑和编译,生成可执行文件以后,需要在嵌入式目标系统上通过FTP方式,下载编译好的可执行文件到嵌入式目标系统上运行,如果程序运行错误,则回到Linux服务器上修改源文件并重新编译、下载运行,直到程序正确运行为止。
FTP方式需要Linux服务器运行FTP服务,同时要求嵌入式目标系统端运行FTP客户程序。
FTP方式是一种常用的嵌入式Linux应用程序开发方式,其流程如图所示。
图 FTP方式的应用程序开发流程
2. NFS方式
NFS方式也是首先在Linux服务器上编辑源文件,然后交叉编译,最后生成可执行文件,但生成的可执行文件不再通过FTP等方式下载到嵌入式目标系统,而是在嵌入式目标系统端通过NFS方式挂载Linux服务器的共享分区,让应用程序直接运行在嵌入式目标系统,并进行调试。
NFS方式需要Linux服务器端和嵌入式目标系统端均能支持NFS文件系统。
与其他方式相比较,NFS方式具有较高的调试效率,是一种经常采用的方法。NFS方式的开发流程如图所示。
图 NFS方式的应用程序开发流程
当开发人员完成了应用程序的调试与开发,可以将调试好的应用程序下载到嵌入式目标系统的Flash文件系统,或直接编译到嵌入式Linux内核并烧写到系统的Flash,从而最终形成一个独立的嵌入式应用系统。
我们推荐用户使用NFS方式进行应用程序的方法。
在以下的部分,我们将以一个简单的示例程序来说明基于嵌入式Linux应用程序的开发过程。
一个简单的应用程序
我们使用一个最简单的示例,来说明基于嵌入式Linux的应用程序开发过程。示例程序完成1~100的累加求和,运行时输出每一步的累加结果和最后的总和。
1. FTP方式
第一步:编辑应用程序。
在Linux服务器的工作目录/home/work,使用VI文本编辑器编辑应用程序,应用程序名为test.c:
# vi test.c
程序代码如下:
/* this is a simple calculate program */
#include <stdio.h>
int main(void)
{
int i,sum=0,temp_sum=0;
for(i=1;i<=10;i++)
{
sum=sum+i;
temp_sum=sum;
printf("temp_sum = %d\n",temp_sum);
}
printf("Calculate finished! sum = %d\n",sum);
return 0;
}
编辑完源代码后,保存文件并退出VI。
第二步:编译应用程序。
键入如下命令编译应用程序:
# arm-linux-gcc -o test test.c
当命令执行完毕以后,会在当前目录下生成可执行文件test。
第三步:通过FTP方式将可执行文件test下载到嵌入式目标系统运行。
启动嵌入式目标系统的Linux,使用超级终端作为其用户操作界面,切换到Linux的可写目录,如\var,键入如下命令使用FTP方式登陆Linux服务器:
# ftp 192.168.0.100
192.168.0.100为Linux服务器的IP地址。输入合法的用户名和密码,登陆到Linux服务器,执行如下命令将可执行文件test下载到嵌入式目标系统的当前目录。
# bin ;以二进制方式传输文件
# get test ;将文件test下载到HK-2000的当前目录
# bye
当以上命令执行完毕以后,可执行文件test下载到嵌入式目标系统的当前目录。
第四步:修改文件属性,运行应用程序。
可执行文件test下载到嵌入式目标系统后,可能不具有可执行属性,键入如下命令修改文件属性,并运行应用程序:
# chmod 777 test ;修改文件属性为可执行;
# ./test ;运行应用程序;
此时,用户可以看到应用程序的运行效果,输出每一步的求和结果和总的累加和。
2. NFS方式
第一步:编辑应用程序。
在Linux服务器的工作目录/home/work,使用VI文本编辑器编辑应用程序,应用程序名为test.c。
注意该目录必须是Linux服务器的输出共享目录。
# vi test.c
程序代码如下:
/* this is a simple calculate program */
#include <stdio.h>
int main(void)
{
int i,sum=0,temp_sum=0;
for(i=1;i<=10;i++)
{
sum=sum+i;
temp_sum=sum;
printf("temp_sum = %d\n",temp_sum);
}
printf("Calculate finished! sum = %d\n",sum);
return 0;
}
编辑完源代码后,保存文件并退出VI。
第二步:编译应用程序。
键入如下命令编译应用程序:
# arm-linux-gcc -o test test.c
当命令执行完毕以后,会在当前目录下生成可执行文件test。
第三步:在嵌入式目标系统端挂载Linux服务器的输出共享目录,并运行应用程序。
启动嵌入式目标系统的Linux,使用超级终端作为其用户操作界面,键入如下命令挂载Linux服务器的输出共享目录:
# mkdir /mnt/nfs ;建立Linux服务器输出共享目录的挂载点;
# mount –t nfs 192.168.0.100:/home/work /mnt/nfs -o nolock
# cd /mnt/nfs
# ls
此时,嵌入式目标系统端所显示的内容即为Linux服务器的输出目录的内容,可执行文件test就在该共享目录下,运行该程序:
# ./test
此时,用户可以看到应用程序的运行效果,输出每一步的求和结果和总的累加和。
显然,由于NFS方式省去可执行文件从Linux服务器传输到嵌入式目标系统端的过程,当开发的应用程序比较复杂时,采用该方式可以大大提高应用程序的开发效率。
4.3.3 固化应用程序并自动运行
无论是使用FTP方式,还是NFS,应用程序都没有固化到系统中,但在实际的嵌入式应用中,用户需要将已经调试完成的程序固化到系统的Flash存储器,并希望系统启动时可以自动运行。
应用程序可以以静态的方式,放入Linux源代码中,然后重新编译Linux源码并下载到嵌入式系统运行,但这种方式很不灵活,只要用户修改了应用程序,就需要重新编译并下载,使用非常不方便。
HK-2000在Nor Flash和NAND Flash上均实现了文件系统支持,用户可以象操作PC的硬盘一样,对相关目录进行读写,这些目录都具有掉电不丢失数据的特性。
在HK-2000系统Linux启动以后,用户可以使用命令df,查看系统的分区信息:
# df
此时显示系统的分区信息:
/dev/mtd/4 64M /mnt/Nand
用户可以将调试好的应用程序,如前所述的test,通过NFS或FTP方式拷贝到某个目录下,只要用户不将其删除,该文件就会一直存在。
然后用户可以编辑文件/usr/etc/rc.local,该文件为系统启动时的自动执行文件,用户可以将需要启动运行的程序路径及文件名添加到这里,就可以实现在系统启动时的程序自动运行。
转载于:https://www.cnblogs.com/caolisong/archive/2007/12/11/990627.html
基于HK-2000 OEM的嵌入式Linux开发相关推荐
- 基于ARM的嵌入式Linux开发平台
在进行嵌入式系统的开发时,首先面临的难题就是如何挑选一个适合自己的开发平台.ARM系列处理器是专门针对嵌入式设备设计的,是目前构造嵌入式系统硬件平台的首选.本文将介绍如何挑选适合实际需要的嵌入式开发平 ...
- 【嵌入式Linux开发学习】基于TFTP的通用代码烧写方式
文章目录 概述 实现思路 升级UBOOT 升级KERNEL ROOTFS QEMU 仿真 代码实现 升级效果 概述 对于从事嵌入式行业的人来说,进行代码升级一定不会陌生.相对于单片机相对单一的烧写方式 ...
- 构建嵌入式系统软件开发环境-VMware的安装及搭建嵌入式Linux开发环境
嵌入式系统操作系统 目前流行的嵌入式操作系统主要有VxWorks.WindowsCE.Linux等,由于Linux的源码开放性.内核可裁剪性.在图像处理.文件管理及多任务支持等诸多方面的特点,使得它成 ...
- 嵌入式linux开发环境搭建——VirtualBox虚拟机网络环境解析
嵌入式linux开发环境搭建--VirtualBox虚拟机网络环境解析 本博文转自:Pandoras Box http://blog.csdn.net/yxc135/article/details/8 ...
- 嵌入式linux开发课程设计,嵌入式Linux开发课程设计指导书
嵌入式Linux开发课程设计指导书 课程编码: 适应专业:计算机专业.电子信息工程专业 学时:3周(计算机专业),2周(电子信息工程专业) 学分: 3(计算机专业),2(电子信息工程专业)时间安排:分 ...
- C语言到嵌入式Linux开发项目指导
C语言到嵌入式Linux开发项目指导 第一阶段C语言 1.常量与变量,数据类型,数据类型转换,数据输入与输出: 2.C语言运算符,C语言操作符,C语言表达式,表达式优先级: 3.C语言流程控制,分支, ...
- 嵌入式linux/鸿蒙开发板(IMX6ULL)开发(一) 嵌入式Linux开发基本概念以及开发流程介绍
文章目录 1.linux开发初了解 1.1 嵌入式Linux开发的基本概念 1.1.1关于Git的背景介绍 1.1.2关于repo的背景介绍 1.1 3 一些关于此背景知识的介绍 1.1.4关于Lin ...
- 第六、七章 嵌入式Linux开发
第六.七章 嵌入式Linux开发 BIOS读取硬盘最前面512字节(MBR),MBR中只能存储一个OS的引导记录,如多系统则会出现问题 MBR包含部分或全部Bootloader及分区表 Bootloa ...
- 单片机、嵌入式Linux开发大学自学路径
笔者所修读的专业为物联网工程,物联网工程是一门新兴的.热门的专业,其所涉及的学科更是又多又杂,既有计算机方向的编程语言(如C.C++.Java.Python等).数据结构与算法.操作系统.移动端应用开 ...
- 嵌入式大牛详解:嵌入式linux开发流程总结
很多的小伙伴都私信问了小编在嵌入式学习的过程中都能学到什么,这次小编就顺从大家的意思来一篇嵌入式linux开发的流程,嵌入式linux的学习是不可少的,可以说嵌入式linux是学习比较困难的,会遇到各 ...
最新文章
- 如何快速融入团队并成为团队核心?(九)
- java同步锁售票_Java基础学习笔记: 多线程,线程池,同步锁(Lock,synchronized )(Thread类,ExecutorService ,Future类)(卖火车票案例)...
- 【ZooKeeper Notes 28】ZooKeeper典型应用场景一览
- html转word并保持格式不变,表格从Word转Excel想保持格式不变?用这两种方法,保你轻松搞定...
- PMP知识点(一、全局概览)
- Mo's Algorithm
- Hadoop HBase概念学习系列之hbase shell中执行java方法(高手必备)(二十五)
- 数据结构上机实践第八周项目3-顺序串算法
- iOS14 UIDatePicker的变化
- 大话IT职场之-办公室政治
- linux硬盘温度,linux查看硬盘温度和使用情况
- pdf 加深 扫描件_怎样把扫描的字体加深 pdf扫描件字体加深
- 记录Linux开发板串口调试、静态ip
- Rayman的绝顶之路——Leetcode每日一题打卡5
- 医学图像处理常用的看图软件介绍及使用(RadiAnt DICOM Viewer、ITK-Snap和3D Slicer)
- WMS系统的功能,业务和定义
- 聊聊外包团队的高效管理机制
- Mybatis的truncate table方法与SQL语句delete的区别
- uniapp使用输入框固定在底部键盘弹起把输入框挡住问题
- Windows 11配置WSL及Linux子系统安装