达芬奇平台编写hello world程序

来源:互联网 发布:淘宝pc海报尺寸 编辑:程序博客网 时间:2024/05/18 11:07

实验室的达芬奇平台早就搭建好了,自己机器通过以太网与服务器通信,服务器与板子使用串口进行程序调试,他们的文件系统也需要以太网来进行nfs服务。刚刚接触,学会了使用该平台进行简单的交叉编译,整理一下,供实验室以后的同学参考。一些细节的地方还需要高手指点一二。

安装SecureCRT 5.1 或其他远程登陆软件,该软件在服务器上可以下载(192.1.12.2)自己可以去网上下载。之后需要管理员给定一个帐号,使用软件登陆服务器。假设建立用户testkevin,密码自定。拥有该用户名和密码的人可以使用SecureCRT 5.1登陆服务器,但是要进行交叉编译还要进行其他设定。首先,该用户在服务器上的linux系统中的权限十分有限,只能操作自己目录下的文件,所以要将其的权限扩大,使得其在使用其他不属于他的权限是只要输入:sudo xx就可以了。使用root登陆(或其他被开放的用户),修改/etc/sudoers中部分代码。

在# User privilege specification
root    ALL=(ALL) ALL
# Uncomment to allow people in group wheel to run all commands

加入 testadd  ALL=(ALL) NOPASSWD:ALL

其中在root后面会发现其他用户名,就是以前拥有这样权限的用户。改完保存退出即可。

这样,该用户具有了root除了修改密码的所有权限,只是一些命令需要加上sudo而已。可以方便的使用服务器上的系统还不行,要到板子上跑程序,需要将服务器上的程序挂载到板子上,再通过minicom(与windows中的超级终端相类似)进行调试。挂载就需要打开nfs服务。使用root用户,或是testadd等其他用户sudo修改/etc/exports中的代码。

在最后增加 /home/testadd  *(rw,no_root_squash)

表明在服务器上的该目录下的文件可以进行nfs挂载。改完保存退出。下面需要打开nfs服务。

在testadd用户下键入如下命令:

sudo /etc/init.d/portmap start   会得到:Starting portmapper: [  OK  ]的提示
sudo /etc/init.d/nfs start           会得到:Starting NFS services:  [  OK  ]
                                                                    Starting NFS quotas: [  OK  ]
                                                                    Starting NFS daemon: [  OK  ]
                                                                      Starting NFS mountd: [  OK  ]的提示,此时nfs打开成功。

打开成功后,输入:sudo minicom便可打开串口调试。部分提示信息如下:

NET: Registered protocol family 2
IP: routing cache hash table of 512 buckets, 4Kbytes
TCP: Hash tables configured (established 2048 bind 4096)
NET: Registered protocol family 1
NET: Registered protocol family 17
IP-Config: Incomplete network configuration information.
RAMDISK: Compressed image found at block 0
EXT2-fs warning: checktime reached, running e2fsck is recommended
VFS: Mounted root (ext2 filesystem).
Freeing init memory: 108K

(注意:一些原因使得不进行,请重启开发板)。

刚进入板子是没有ip的需要对其进行ip设置,才能nfs挂载。

ifconfig eth0 192.1.12.123配置ip。再ping一下服务器:

ping -c 3 192.1.12.2(注意-c 3表示ping三次,否则就没完没了了),得到提示:

64 bytes from 192.1.12.2: icmp_seq=0 ttl=64 time=6.1 ms
64 bytes from 192.1.12.2: icmp_seq=1 ttl=64 time=0.5 ms
64 bytes from 192.1.12.2: icmp_seq=2 ttl=64 time=0.5 ms

--- 192.1.12.2 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0.5/2.3/6.1 ms

证明二者已经以太网连接了,可以进行nfs挂载了。

建立一个临时目录:mkdir testadd。然后挂载:mount 192.1.12.2:/home/testadd testadd 提示信息:

RPC: sendmsg returned error 101
portmap: RPC call returned error 101
RPC: failed to contact portmap (errno -101).
RPC: sendmsg returned error 101
portmap: RPC call returned error 101
RPC: failed to contact portmap (errno -101).
lockd_up: makesock failed, error=-101
RPC: sendmsg returned error 101
portmap: RPC call returned error 101
RPC: failed to contact portmap (errno -101).

再ls即可看到:/mnt # ls
                          testadd  也就是将位于服务器上的testadd挂载到板子上了。怎么证明是正确的呢?我们再打开一个窗口,使用testadd在服务器上建立一个hello world程序。

在testadd目录下:vi helloworld.c,输入程序:

#include <stdio.h>
int main()
{
 printf("Hello World!/n");
 return 0;
} 保存退出。再编译:arm-linux-gcc helloworld.c -o testhello,此时ls就会发现在服务器上的testadd中是这样的:

helloworld.c  testhello

回到minicom中,也ls:

helloworld.c  testhello也是一样的,并执行:./testhello,结果会出现:

Hello World!

编译成功。在切换窗口的过程中会切身感受到什么是交叉编译!

注意由于使用的是arm-linux-gcc ,在服务器上执行testhello是不会成功的,如果用gcc就可以了。

退出minicom后,需要关闭nfs:

sudo /etc/init.d/nfs stop  提示信息:

Shutting down NFS mountd: [  OK  ]
Shutting down NFS daemon: [  OK  ]
Shutting down NFS quotas: [  OK  ]
Shutting down NFS services:  [  OK  ]

再输入:
sudo /etc/init.d/portmap stop 提示信息:

Stopping portmapper: [  OK  ]

完成。

 

 

 
原创粉丝点击