微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > 嵌入式系统设计讨论 > + 编译hello world

+ 编译hello world

时间:10-02 整理:3721RD 点击:
这次搭建Ubuntu下的开发环境,并编写最简单的hello.c,编译后放到开发板上运行。
1、Ubuntu开发环境搭建。
关于Ubuntu开发环境搭建,天嵌的配套教材上有比较详细的说明。在搭建过程中,会用到一些终端命令,这些我也是首次接触。少一个空格、一个反斜杠,都会变成command not found 或 no such file or directory。按照教材去安装搭建的时候,首次玩的同学得和我一样,多点耐心,多用搜索查询。这样也好,对熟悉终端命令是个不错的锻炼。因为刚开始学习Linux,所以在Windows下一些简单的复制、粘贴、移动文件,在Ubuntu下都显得复杂困难,需要面对cp,mv等命令的考验。不过按照教材做,都能做出来的。
2、在PC的Ubuntu上编写第一个hello.c文件
  听从大家的建议,先安装了vim。sudo apt-get install vim,在联网状态下,使用这个命令安装vim。
安装后,在终端下输入vim hello.c,终端会弹出一个界面,在底部显示“hello.c”[New File],此时按"i",就会进入插入编辑模式,就可以编写代码了。写个printf ("hello world")。写完后,按键盘上的ESC键,接着输入“:wq”,注意有英文状态下的冒号,此时vim文本编辑器就会保存刚才的代码并退出。
3、编译hello.c
(1)若是想直接在PC机上运行程序,则使用gcc进行编译。在终端下输入gcc hello.c -o hello,就会编译出一个hello的可执行文件。在终端下输入ls,可看到这个hello文件。在终端下输入./hello,则可看到输出结果hello world
(2)咱们目的是让这个文件在开发板上执行,所以要使用交叉编译器。在终端下输入arm-linux-gcc -g hello.c -o hello。没仔细看交叉编译器的说明,既然叫交叉编译器,那说明PC机的CPU架构与开发板ARM架构有差异吧,所以交叉编译器将程序编译成开发板能够运行的可执行程序。
4、将hello可执行文件传到开发板上
   网上搜到的方法总体有3种,我目前只看了使用minicom传文件,也只会这个。
(1)在PC机上安装minicom,进行串口设置。安装后,在终端下首先获取root权限,否则在后面的保存设置中会提示无法写入。在终端下输入minicom -s即可看到串口的相关设置界面,我就设置了2个,一个是文件名和路径,另一个是串口设置,其他没动。在串口设置中,若使用的是USB转串口,则Serial Device中,要填入/dev/ttyUSB0;若计算机上有直接的硬件串口,则输入/dev/ttyS0。在文件名和路径设置中,需要设置2个目录。其他没什么设置的。
(2)硬件连接,将USB转串口+交叉串口线插到PC和开发板上。在PC终端中输入minicom,然后给开发板上电,会看到启动信息,最后会提示按回车键。按下回车键后,即进入到开发板的终端命令,按下ctrl+a组合键,再按下Z键,就会看到minicom功能选择界面,按下S键,会提示让选择通讯协议,使用方向键选择xmodem,此时就会看到你刚刚设置的文件名和路径中upload目录下的文件(在此之前已将hello文件放到这个目录下)。使用方向键移动光标到hello文件前面,然后按下空格键选中文件,接着回车就可以了,即刻能看到传输完成。
(3)此时已将hello文件传到开发板上。在终端下输入./hello,就能看到运行结果。
5、如何让hello可执行文件在开机会就自动运行
(1)从网上找了很久,试了几个帖子的说法,都没完成。但大致思路都是ubuntu系统在启动时会到init.d的目录下去读rc-local.service启动文件,在该文件中有开机自运行服务或程序的脚本。但我没找到,后来又找到一篇文章,我在开发板的/etc/init.d目录下找到个rcS文件,作用应该和rc-local.service一样。于是在开发板终端命令下,切到/etc/init.d目录下,再输入vi rcS,编辑这个文件,在已经有的两个start服务下添加/etc/rc.d/init.d/hello start即可,保存退出(这个编辑、保存退出操作和vim一样)。
   在上述过程中,首先要将hello文件放到/etc/rc.d/init.d目录下。要注意的是有两个init.d路径,rcS在/etc/init.d中,而hello在/etc/rc.d/init.d下。此时就已经完成hello上电启动脚本添加。
(2)测试,断电再上电,可以看到打印了hello world。
我的疑问是
(1)比如串口收发程序,不能仅仅只在系统启动时运行一下,启动后是不是也一直在运行,保持收发状态?
(2)我编译了math-test的程序,同样的步骤放到/etc/rc.d/init.d路径下,并且添加了启动脚本,但是启动时报错,提示Permission denied,权限拒绝的提示。这是为什么?我是在PC下用make编译了程序。
后续学习开发板的使用,前面都是基本的环境搭建熟悉,后面要真正的用上开发板的通信接口。



















Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top