嵌入式LINUX开发入门

来源:互联网 发布:js div删除classname 编辑:程序博客网 时间:2024/04/30 03:19

 

本文主要介绍一下在LINUX环境下开发嵌入式软件中的一些常识性的东西,对每一项不做深究展开。同样一个问题的解决方法有很多,我把自己习惯用的方法分享在这里。也希望谁有更好经验的也拿来分享。

先介绍一下基本环境。嵌入式开发环境多多,本文基本的环境为windows-xp操作系统,虚拟机ubuntu 11.10

虚拟机安装

这里选用ubuntu-11.10。可以自行从网上下载,我是从这个地址下载的:http://releases.ubuntu.com/11.10/ubuntu-11.10-desktop-i386.iso。更多的版本可以从这个网址自行选择:http://releases.ubuntu.com/

下载完成后,再下载一个vmware虚拟机软件,用于安装LINUX。安装方法非常傻瓜化,一路默认设置装下来即可。

有几个需要稍微注意的地方介绍如下:

1,创建过程中,有一步要求指定磁盘大小,其标题为:"Specific Disk Capability",其默认设置为20G。建议将它设置的大一些。它只是一个最大值,不会实际占用太大的空间。将其设大些可以避免以后空间不够,再上网找办法增加空间。

2,还是这个设置页,有两个选项:1, "Store virtual disk as a single file"; 2,"Split virtual disk into 2GB files"。选项2存在的目的,是因为windowsFAT32文件系统能支持的文件大小有限。如果你的磁盘是FAT32,则只能选2。如果是NTFS格式,则建议选1。当然了,选1还是2对实际使用没有任何影响,只不过选1的话,可以让你的虚拟机目录看起来文件少一些。

3,用户名。安装过程中,会要求输入初始的用户名和密码(不是root帐户)。这个没啥问题。安装完成后也没问题。但是,root帐户呢?比如,用户名lfx,密码123456,然后安装完成后就会有一个lfx帐户,其密码为123456。这里需要注意:该帐户有sudo权限。其权限密码同用户密码相同。而root帐户有点儿可怜,还没创建呢。个人建议还是弄一个root帐户出来,方法为:输入命令:sudo passwd root。然后开始输入root的新密码即可。

4,图形化界面。在步骤3中,是在命令行中操作的。也就是说,安装完成后,它停在了命令行中。没进窗口界面。输入命令:startx,然后系统就进图形界面了。个人建议先进到root帐户,再startxRoot帐户用起来比较方便。同时需要注意,进过一次之后,再重启会自动进入窗口界面。(尝试让它开机进命令行,但是失败了。。。)

5,命令行terminal,没找到从哪里能打开命令行terminal。还好找到一个快捷键:CTRL+ALT+T。至于从界面中如何进,不管了。

PS:建议安装vimsudo apt-get install vim。不安装的话,vi编辑文件时,方向键不能移动光标。

网络设置

首先要设置虚拟机的网络,在虚拟机标签页上点右键,选settingsHardware标签,Network Adapter项,在右边选中Bridged框。确定即可。桥接的连接方式,可以让虚拟机如同与windows运行在同一局域网中的另外一台电脑一样。非常明了。

root帐户登陆进ubuntu的图形界面,右上角有个“↑↓”的标记,点击,选择Edit Connections.IP设置为与windows同一网段。网关和DNS的设置也要与windows相同。设置好后,开命令行ping一下网关是否能通,再ping一下DNS,确保网络畅通。文件共享

文件共享

文件共享的方式有很多,这里推荐使用samba。下面的配置方式,需要能够连接公网

Samba的配置一直是个麻烦,好在在ubuntu 11.10中还算比较简单。步骤如下:

1,在ubuntn中选择一个目录,比如/home/lfx,在上面点右键,选择Share Options.

2,选中Share This Folder前面的框框

3share Name要改一下,不能和用户名相同

4,选中Allow others to create and delete files in this folder

5,点击Create Share

6,会有提示,安装samba,全都照他说得办。这个过程中,会需要ROOT权限

7,这一套办完,还需要创建一个samba的帐户,命令如下:

sudo smbpasswd -a lfx

按提示输入密码即可。

最后,试下从windows上看能否打开这个目录吧

windows上打开共享后,在共享目录上点右键,映射网络驱动器。这样在“我的电脑”目录下就能直接访问linux的共享了。里面的文件用起来如同在windows目录中一样,基本没什么区别。

Linux命令行远程工具

这里说的命令行工具,是指Secure CRT。它可以通过网络,连接虚拟机。连接完成后,就如同真正在linux环境中的命令行一样。至于为什么使用它,而不是直接在虚拟机中使用,主要是虚拟机中,按alt+tab没办法切换回来。没装vm tools时更麻烦。还有其它优势,用多了就明白了。

还有个优势就是,可以将LINUX不装在虚拟机上,而是装在一台高配置的服务器上。然后多人连接,共享使用。这时Secure CRT的作用就更体现出来了。

这东西的下载地址,自己找吧。网上大把。

服务器配置

新装的ubuntu没有ssh服务端,需要自行安装:

sudo apt-get install ssh

/etc/init.d/ssh start

完成

终端Secure CRT连接、配置方法:

1,文件->快速连接,协议选择SSH2,主机名填写linuxIP。用户名为linux用户名。然后确定

2,这时会弹出一个框(有可能需要等一会儿才出来),要求输入密码,输入即可,选中“保存密码”可以方便下次登陆。

3,这样就可以基本使用了。也可以再配置一下,用起来更方便一些

4,在标签页上点右键->会话选项->终端->仿真,在右边最上面:“终端”项选linux.。右边最下面“回滚缓冲区”原值为500,改成5000。这个值代表的是命令行能容纳的最多的行数。

5,还是这个配置页,外观选项,“字符编码”改成UTF-8。这样才能让linux中的中文正常显示。

Linux 图形远程工具

xManager。这个工具可以远程登陆linux/unix/windows。非常方便易用。需要的话可以研究下,这里不多说了。

虚拟机+securt+samba的情况下,用不着它。

服务器+securt+samba的情况下,就可以在服务器中安装一个xmanager的服务端,使用它会方便些。串口工具

还是Secure CRT这个神器。

连接方法:文件->快速连接,协议选择Serial,端口和波特率根据实际情况选择,右侧“流控”有三个选项,都不要选,其它不用管(如果设备特殊,其它可能也要调,不过我没遇到过)。

配置完成后连接即可。

如果设备是linux环境,请参照连接linux时的配置方式配置一下,看起来会舒服些。5005000的那个命令行回滚参数,建议一定要改。

再介绍个非常有用的功能:配置自动记录打印信息。一次配置,终生受益。

这个功能可以让它每天自动记录一个文件,将所有的串口通讯信息保存起来。实用中非常方便。

在串口标签页上点右键->会话选项,找到“日志文件”一栏,在右侧可以配置自动将打印保存到文件中。文件名可配置,自动以日期为文件名,一天一个文件。我的文件名为:session-%M%D.log,其它自己研究。

版本管理

这里强烈建议使用SVN管理代码、文档。

SVN的介绍有很多,这里只说切身体验最关键的两点优点:

1,可以导出历史版本。也就是说你可以让你的代码,回到以前的某一个版本当中。

2,支持自动合并。两个甚至更多人可以同时修改同一个文件。只要修改的不是同一行,SVN可以帮助你们把多人的修改合并到一处。这不像VSS那样必须先锁定文件。

同样优秀的,git也是不错的版本管理工具,但用起来稍嫌复杂。

SVN管理首先要配置一个服务端。这个服务端可以安装在WINDOWS上,也可以安装在linux中。Linux安装方法如下:

服务器端:

sudo apt-get install subversion

下面的命令,将建立两个分开的版本库,其位置位于:/svn/test1,svn/test2

sudo apt-get install subversion

sudo mkdir /svn/

sudo mkdir /svn/test1

sudo mkdir /svn/test2

sudo svnadmin create /svn/test1/

sudo svnadmin create /svn/test2/

然后,需要修改文件/svn/test1/conf/svnserve.conf中的如下几行:

anon-access = read

auth-access = write

password-db = passwd

其它不动,只要将这几行前面的“#”却掉即可,注意一定要顶格。

修改/svn/test1/conf/passwd添加用户名和密码。

然后,再执行一个命令,就可以用了:

sudo svnserve -d -r /svn

客户端:

推荐使用tortoise svn图形化工具。在windows系统上。

新建工程:

安装完成后,在想添加版本管理的目录上点右键->TortoiseSvn->Import,在弹出来的提示框中输入svn://192.168.11.42/test1/{工程名},然后确定。会提示输入用户名和密码,填上服务器中设置的用户名和密码即可。

获取一个已有工程:

建一个空目录,点右键->SVN Checkout,然后选择路径,确定即可

在已有工程上更新版本:

在已有工程的目录上点右键->SVN Update即可

提交修改

修改某文件后,在工程上点右键,或者在工程目录中某一子目录空白处点右键->SVN Commit,会有弹出框,选择要提交的文件,填写注释即可。

更新历史版本:

方法一:获取一个历史版本的工程,在空目录中,右键->SVN Checkout,然后选择路径,注意右下角有一个“Show log”项,点一下,然后选择历史版本,确定即可。

方法二:在已有工程上,点右键-Tortoise SVN->Show Log,然后在期望的版本上点右键-update item to revision即可。

其它更多功能,自己摸索下吧。有界面的情况下用起来非常简单。

代码编辑工具

Source insight 编程神器。所有没用过这东西,而坚持用VCUE等编辑文件的朋友们,强烈建议试一下。简单易用,这里就不多说了。

MAKEFILE

Makefile,实际上就是一个工具,可以让我们批量的编译大堆的文件,库。最终生成我们期望的可执行文件。

基本的Makefile没什么可说的,自己找资料学一下就成。文章一大把。

这里简单说一下生成Makefile的几个工具。

Autotools。这东西牵扯一大堆的工具,功能强大,用法复杂。要使用这东西,必须安装好几个相关的工具。最大的问题是,由于版本不同,会造成兼容性问题。出错后的纠察也较为困难,适合高手使用。对于需要集成开源软件的同志们来说,没办法,必须要用。抱着学习目的看本文的同志们,强烈不建议研究这东西。

CMake。隆重介绍下,这个东东是个好东东。本人也是头几天初次使用。非常简单易用。具体用法就不讲了,从做的工程中抽了个模板出来,有兴趣的可以下载下来直接修改着用。http://download.csdn.net/detail/taixinlfx/4263725

代码规范

个人总结,要注意的几个地方:

1,遵守原代码的风格,原代码怎么写,新添加的代码就怎么写。

2,少用全局变量,尽量不用。

3,各个文件尽量独立,减少互相依赖,尽量不要互相依赖

4,如果C文件中的静态变量较多,可以用一个结构体把它们组织起来。

5,只提供必须的函数做外部函数,并在头文件中声明。其它的函数都做成static类型。

6malloc敏感,看到它首先想到的是有没有释放内存。

强烈建议,花上一、两个小时的时间,看一下林锐的“高质量C++/C编程指南”。下载地址:http://download.csdn.net/detail/taixinlfx/4263733

代码注释,自动生成文档

介绍个工具:doxygen。它可以把规范的注释生成文档。下载和使用方法,请自行到网上找。代码的注释风格大致如下:

/**

 *@brief 函数的简要说明

 *函数的具体说明

 *@param handle 参数说明

 *@param msg 参数说明

 *@note 需要注意的地方。 #jv_queue_create 这种# + 函数名的方式,可以变成一个链接指向该函数

 *@return 0 成功,错误号表示超时

 *@retval 0 意义

 *@retval 1 意义

 *@retval 2 意义

 *

 */

int jv_queue_recv(int handle, void *msg, int timeout);

NFS服务

这个东西,大家了解的可能多一些。嵌入式开发基本上必须用到的东西。在LINUX主机上开通NFS服务,并指定一个目录。然后在开发板上(需要是LINUX系统的开发板)就可以通过mountNFS指定的目录挂载到本地。从而方便升级、调试。

服务器配置

安装:apt-get install nfs-kernel-server

sudo vi /etc/export,仿照如下句子添加。

/home/lfx          *(rw,sync,no_subtree_check)

其中,*可以改成192.168.11.22,限制只有固定IP可以访问,也可以部分用*代替。

启动:/etc/init.d/nfs-kernel-server restart

开发板端挂载命令:

mount -t nfs -o nolock 192.168.11.131:/home/lfx/ /mnt/

原创粉丝点击