嵌入式Linux编程--我的第一次艰难跋涉

news/2024/7/5 5:11:17

其实从很早我就想深入学习Linux,但时间有限,并且Linux门槛挺高,不是很容易上手。最近由于隧道项目中用到嵌入式LinuxArm CPU上的Linux),并且提供硬件的单位针对Linux的编程收费很高,并且时间很长,所以犹豫再三,决定开始深入学习Linux,并在学习过程中完成预定的任务。

没有想到,在嵌入式Linux上运行一个最简单的“Hello Liunx”程序就费了很大的周折,不过功夫不负有心人,经过几天的艰难跋涉,总算成功了,下面我把我的历程说一下,给后来人有个参考。

要想在嵌入式Linux运行程序,需要有下面几个问题解决:

1、  需要一个基于Armgcc交叉编译器;

2、  需要WindowsVPC上的Linux进行交互,以便交换文件;

3、  嵌入式Linux系统需要和VPC上的Linux系统或Windows系统进行交互,以便交互文件;

 

第一个问题,相对比较容易解决,直接和中间厂商要来了cross-2.95.3.tar.bz2 安装包,这是一款基于Arm平台上的交叉编辑器。直接解压到任意目录即可。

第二个问题,有些棘手,查了若干资料,终于找到可行的办法。

1、  Windows XP建一个共享文件夹,如“share

2、  虚拟机运行起来后,在Linux命令行方式输入:smbmount //ip地址或计算机名/共享文件夹名 挂载点

3、  Ok,连接成功。

第三个问题,原想着很容易,却没有想到是最难的,中间厂商的办法如下:

采用目标板挂载NFS目录的方式进行开发

主机:NFS服务器

1、  修改配置文件etc/exports,如

/nfs/rootfs 192.168.0.X(rw,sync,no_root_squash)  //具体含义略

2、  配置其为所有用户可读,chmod 644 /etc/exports

3、  NFS服务器重新载入 etc/exports, /etc/init.d/nfs reload

4、  检查防火墙,不要屏蔽相应端口

    目标板:内核需要支持NFS

    1Enable:

     File Systems à

        Network File Systems à

          NFS file system support

          Provide NFSv3 client support

    配置完后,重新编译内核

2、目标板启动后,mount –t nfs 192.168.0.Y:/nfs/rootfs/mnt –o nolock

 

按上面一步步做了,目标板提示RPC什么错误之类,上网查资料,用Servers指令开启服务,很可惜,目标板不支持Servers指令。

最后发现目标板支持FTP服务器,总数找到一个救命稻草,不过很可惜,用户密码未知,问了中间厂商,用户和密码仍然错误,最后打了n次电话,告诉可以在目标板上添加新用户,然后再登录FTP

很恐怖的是,书本上教的useradd竟然没有,后来查看目标板bin上的文件,原来是adduser命令,添加上用户,果然可以登录了。不过linux上的FTP客户端不好使,Windows自带的也不行,只好下了个FlashFXP软件,还可以。

 

在虚拟机的Liunx系统编写如下程序:

#include

int main(int argc,char **argv)

{

   printf("hello linux/n");

}

编写Makefile文件

all:tt

tt: test.c

       /usr/local/arm/2.95.3/bin/arm-linux-gcc -o  tt test.c

clean:

       -rm -rf tt

在命令行运行Make指令,生成tt文件

 

tt文件通过FTP客户端拷贝到目标板上。

开始直接输入[root@()]$tt 没有反应,查资料,发现原来要这样(如下),为什么?暂时不知道!

[root@()]$ ./tt  ,竟然有错误提示,提示内容如下:-sh./tt:Permission denied

上网查资料说是权限不够,需要运行如下指令:chmode 777 tt

运行后,竟然告诉我,没有这个命令,最后发现原来是 chmod(看来指令的名称都被中间厂商修改了)。

运行chmod 777 tt 后,在去运行 ./tt  ^^#$^#$@&# OK ---成功了!

后记:linux的使用习惯与windows有很大的区别,linux联网需要激活网卡才能工作,运行文件需要 ./XXX格式,并且有权限的用户才能执行,类似的小问题,对一个linux菜鸟来说,真是一个又一个的拦路虎,不过到现在总算接近门槛了,对我来说,后面的路还很长,困难才刚刚开始 … … :-(





http://www.niftyadmin.cn/n/3655830.html

相关文章

2020-12-06 原型链面试题

明确foo 和 F的原型链,沿着原型链找A属性和B属性; console.log(foo.a) foo 是个对象 对象的原型链 是Object foo.a 的原型链上a 所以 输出 value a console.log(foo.b) undefined foo的原型链上 没有 F console.log(F.a) value a F 的原型链是f…

Windows Mobile远程控制软件Pocket Controller Pro简介

Pocket Controller Pro是一款优秀的PPC/Windows Mobile远程控制软件,功能非常强大,安装完毕后,不仅可通过同步信道控制远程设备,此外还可以通过TCP/IP操控远程设备,速度性能达到了极致,完全可以取代VS2005提…

2020-12-09 二叉树的先中后序遍历

递归版 先序遍历算法口诀 访问根节点对左子树进行先序遍历对右子树进行先序遍历 const preorder (root) > {if(!root) { return }console.log(root.val)preorder(root.left)preorder(root.right) } 中序遍历算法口诀 对根节点的左子树进行中序遍历访问根节点对跟几点的右…

.Net程序开发中一个较为隐蔽的GDI泄露探析

最近一直在调试第三方委托开发的医疗输液系统(我接手时,代码已经完成,原则上我只修改接口部分以适应我们的硬件即可,不过调试过程中,该程序本身问题暴露不少),该系统用VB.net开发,该软件的图形界面是花费n多…

js --- 图的深度广度优先遍历

深度优先遍算法口诀 访问根节点对根节点的没有访问过的降临节点进行深度优先遍历 const graph {0:[1,2],1:[2],2:[0,3],3:[3] } const visited new Set() const dfs (n) >{console.log(n)visited.add(n)graph[n].forEach(c > {if (!visited.has(c)){dfs(c)}}); } dfs…

西门子Prodave5.5使用说明及VC示例

西门子PLC的通信协议主要是PPI、MPI、Profibus、CP243/CP343/CP443 网络协议,prodave是早期完成的程序接口,除了网络协议外其它的主要协议都支持,SoftNet是西门子最新推出的通信协议接口,稳定,并且大而全,目…

2020-12-18 js 实现堆

堆是什么? 堆是一种特殊的完全二叉树所有的节点都大于等于(最大堆)或小于等于(最小堆)它的子节点。 js 中的堆 js 中通常用数组表示堆左侧子节点的位置是 2 * index 1右侧子节点的位置是2* index 2父节点位置是&am…

VB实现SHELL扩展之接口参数获取失败探析

前几天有位网友问我用VB实现SHELL扩展的问题,这个问题比较有意思,虽然VB较少使用了,但是用VB开发COM组件还是比较方便的(前几天用EVC开发COM组件,相比起来,用VB还是比较幸福的),所以…