HK-2000硬件操作手册V2.doc

嵌入式开发环境的建立

 

嵌入式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开发相关推荐

  1. 基于ARM的嵌入式Linux开发平台

    在进行嵌入式系统的开发时,首先面临的难题就是如何挑选一个适合自己的开发平台.ARM系列处理器是专门针对嵌入式设备设计的,是目前构造嵌入式系统硬件平台的首选.本文将介绍如何挑选适合实际需要的嵌入式开发平 ...

  2. 【嵌入式Linux开发学习】基于TFTP的通用代码烧写方式

    文章目录 概述 实现思路 升级UBOOT 升级KERNEL ROOTFS QEMU 仿真 代码实现 升级效果 概述 对于从事嵌入式行业的人来说,进行代码升级一定不会陌生.相对于单片机相对单一的烧写方式 ...

  3. 构建嵌入式系统软件开发环境-VMware的安装及搭建嵌入式Linux开发环境

    嵌入式系统操作系统 目前流行的嵌入式操作系统主要有VxWorks.WindowsCE.Linux等,由于Linux的源码开放性.内核可裁剪性.在图像处理.文件管理及多任务支持等诸多方面的特点,使得它成 ...

  4. 嵌入式linux开发环境搭建——VirtualBox虚拟机网络环境解析

    嵌入式linux开发环境搭建--VirtualBox虚拟机网络环境解析 本博文转自:Pandoras Box http://blog.csdn.net/yxc135/article/details/8 ...

  5. 嵌入式linux开发课程设计,嵌入式Linux开发课程设计指导书

    嵌入式Linux开发课程设计指导书 课程编码: 适应专业:计算机专业.电子信息工程专业 学时:3周(计算机专业),2周(电子信息工程专业) 学分: 3(计算机专业),2(电子信息工程专业)时间安排:分 ...

  6. C语言到嵌入式Linux开发项目指导

    C语言到嵌入式Linux开发项目指导 第一阶段C语言 1.常量与变量,数据类型,数据类型转换,数据输入与输出: 2.C语言运算符,C语言操作符,C语言表达式,表达式优先级: 3.C语言流程控制,分支, ...

  7. 嵌入式linux/鸿蒙开发板(IMX6ULL)开发(一) 嵌入式Linux开发基本概念以及开发流程介绍

    文章目录 1.linux开发初了解 1.1 嵌入式Linux开发的基本概念 1.1.1关于Git的背景介绍 1.1.2关于repo的背景介绍 1.1 3 一些关于此背景知识的介绍 1.1.4关于Lin ...

  8. 第六、七章 嵌入式Linux开发

    第六.七章 嵌入式Linux开发 BIOS读取硬盘最前面512字节(MBR),MBR中只能存储一个OS的引导记录,如多系统则会出现问题 MBR包含部分或全部Bootloader及分区表 Bootloa ...

  9. 单片机、嵌入式Linux开发大学自学路径

    笔者所修读的专业为物联网工程,物联网工程是一门新兴的.热门的专业,其所涉及的学科更是又多又杂,既有计算机方向的编程语言(如C.C++.Java.Python等).数据结构与算法.操作系统.移动端应用开 ...

  10. 嵌入式大牛详解:嵌入式linux开发流程总结

    很多的小伙伴都私信问了小编在嵌入式学习的过程中都能学到什么,这次小编就顺从大家的意思来一篇嵌入式linux开发的流程,嵌入式linux的学习是不可少的,可以说嵌入式linux是学习比较困难的,会遇到各 ...

最新文章

  1. 如何快速融入团队并成为团队核心?(九)
  2. java同步锁售票_Java基础学习笔记: 多线程,线程池,同步锁(Lock,synchronized )(Thread类,ExecutorService ,Future类)(卖火车票案例)...
  3. 【ZooKeeper Notes 28】ZooKeeper典型应用场景一览
  4. html转word并保持格式不变,表格从Word转Excel想保持格式不变?用这两种方法,保你轻松搞定...
  5. PMP知识点(一、全局概览)
  6. Mo's Algorithm
  7. Hadoop HBase概念学习系列之hbase shell中执行java方法(高手必备)(二十五)
  8. 数据结构上机实践第八周项目3-顺序串算法
  9. iOS14 UIDatePicker的变化
  10. 大话IT职场之-办公室政治
  11. linux硬盘温度,linux查看硬盘温度和使用情况
  12. pdf 加深 扫描件_怎样把扫描的字体加深 pdf扫描件字体加深
  13. 记录Linux开发板串口调试、静态ip
  14. Rayman的绝顶之路——Leetcode每日一题打卡5
  15. 医学图像处理常用的看图软件介绍及使用(RadiAnt DICOM Viewer、ITK-Snap和3D Slicer)
  16. WMS系统的功能,业务和定义
  17. 聊聊外包团队的高效管理机制
  18. Mybatis的truncate table方法与SQL语句delete的区别
  19. uniapp使用输入框固定在底部键盘弹起把输入框挡住问题
  20. Windows 11配置WSL及Linux子系统安装

热门文章

  1. python基础之错误、调试(异常处理)
  2. P1020 导弹拦截 dp 树状数组维护最长升序列
  3. 网络传输中利用fastjson将复杂嵌套数据类型Json格式转换(GeoJsonPolygon)
  4. python抓取数据 常见反爬虫 情况
  5. 如何用Python实现杨辉三角和心
  6. ubuntu 上的python不能解析jpeg,png?
  7. 042 实例10-文本词频统计
  8. OS + RedHat 6.3 x64 / sshd X11 /
  9. mysql 初级练习题
  10. 工程实践:如何规范地打印程序日志?