嵌入式Linux系列第2篇:运行Hello World
yund56 2025-07-23 21:44 12 浏览
1.引言
今天给大家介绍的是在一个嵌入式Linux板子上运行Hello World,软硬件入门学习的经典操作。依稀记得两年前,我第一次在飞思卡尔(现NXP)I.MX6上运行出Hello World的那种喜悦之情。希望这篇文章能对你有所帮助。
2.硬件平台选择
能够运行Linux系统的嵌入式硬件平台,我了解的有这么几个,一是三星的2440系列,著名的韦东山老师的Linux视频教程就是用的这个平台。二是TI的AM335X系列,该系列芯片被广大的工业客户所使用。三是NXP的I.MX6系列,该系列芯片也是非常的有名,广泛的应用在汽车等领域。四是国产瑞芯微RK3xxx系列,消费类的设备里用的比较多。还有树莓派系列,受众多计算机发烧友和创客所追捧,非常适合DIY。
对于初学者该如何选择呢?这个仁者见仁、智者见智,我这里选择的不是上述几种,而是新唐科技NUC972,原因有以下几点:
1)该芯片内置64MB SDRAM,外部只要加一个NAND FLASH就能工作,所以最少只要2层板就可以完成布线,另外它的封装为LQFP,自己手工就可焊接,其他的能跑Linux的芯片,没个6层、8层板是搞不定的,另外也不好手工焊接。所以单凭这一点,就能俘获一大批原来做单片机的工程师的心,因为很多做单片机的都喜欢自己捣鼓画个板实际去调试,毕竟这样会很有成就感。
2)该芯片为工业级芯片,其资源相当丰富,网口、串口、LCD接口、CAN接口等应有尽有,最关键的是它的价格相当亲民,只要大约三十块人民币,所以你如果想自己画板焊接调试,也花费不了多少钱。
3)新唐作为台湾公司,官方给的资料也有中文资料,看起来会比较方便。
所以我后面的系列文章,都以这个NUC972平台为例来讲解了。如果你用的是其他的板子也没什么问题,因为很多东西原理都是类似的,尤其是Linux这种开源软件,熟悉了一个平台后换到另外的平台很容易。就像你会了STM32单片机开发,再用其他家芯片也是很容易上手的。
3.Ubuntu下运行Hello World
在NUC972板子运行程序之前,我们先在Ubuntu下运行一个Hello World。要运行此程序,需要经过编辑->编译->运行三个步骤,
第一步,编辑代码,单片机常用KEIL软件,此IDE集编辑、编译、下载、调试于一体,玩Linux的用什么呢?我见过的有以下几种方式:
a) 在Windows下用Source Insight、QT、VS等软件编辑,再把文件放到虚拟机里编译
b) 直接在Ubuntu里用Eclipse软件编辑
c) 直接在Ubuntu里用vi/vim编辑代码(vim 是vi的升级版本)
这个看大家喜好,选择一种自己喜欢的就行,我其实这几种都尝试过,最后选择了在Windows下用QT的方式,原因是方案b)由于我电脑性能较差,在虚拟机下使用Eclipse一会就会卡机,放弃了;方案c)虽然操作起来很酷,但是对我这种菜鸟使用实在是别扭,当然用熟了会很有效率。至于为什么在Windows选择QT,主要原因是我个人觉得QT的色彩搭配和默认字体我比较喜欢。
因为咱们这个Hello World没几行代码,我就直接在Ubuntu下用gedit打开编写了。复习上一篇文章的操作,在/home/topsemic文件夹下新建一个hello文件夹,用gedit 打开hello.c ,编辑代码保存。
第二步,编译代码,使用gcc指令,gcc是linux系统集成的编译器,这个一装完Ubuntu系统里面就有。最简单的用法是gcc hello.c,它会默认生成a.out
你如果要指定生成的应用程序名字,可以用 gcc hello.c -o hello
这样就生成hello文件,如果你想知道gcc更多详细的用法,可以输入man gcc 获得帮助。
第三步,运行程序,执行 ./a.out,./ 表示的是当前目录,结果是打印Hello World。
4.主机和虚拟机之间复制、粘贴、共享文件夹
不知道你们有没有试过将Windows主机里的内容尝试复制粘贴到虚拟机里,在默认情况下这是不允许的。该如何实现该功能呢?
具体步骤如下:
1)点击虚拟机-安装Vmware Tools
2)在左侧工具栏DVD里会出现VmwareTools-xxxx.tar.gz的文件
3)将这个文件先拷贝到/tmp目录
4)进入到/tmp目录,解压gz文件,解压命令为tar指令
方便大家解压或者压缩文件,我把常用格式的解压和压缩指令给整理出来了,主要原因是我总是记不住,记录下来就不用老上网搜索了。
5)进入到vmware-tools-distrib目录
超级用户sudo执行vmware-install.pl文件:
开始安装,第一个no后面输入yes,后面一路回车即可
安装成功提示如下:
重新启动ubuntu系统(执行reboot)就可以实现主机和虚拟机之间互相复制粘贴了。大家可以尝试下。
下面再介绍一个有用的东西,共享文件夹,就是在Windows下建立一个文件夹,虚拟机里也能同时访问它,比如这里在桌面建立TopsemicUbuntuSharefolder文件夹,里面随便放入一个文件。
点击虚拟机-设置,把共享文件夹打开,配置如下:
虚拟机里对应的目录是
/mnt/hgfs/TopsemicUbuntuSharefolder 文件夹,里面可以看到也是同样的内容。这样就免去了在主机和虚拟机之间来回复制贴粘了。
另外我还见过有人用Samba实现虚拟机和主机共享文件夹的,我没有用过,也不知道相比Vmware自带的优势,所有就不在这里介绍了。
5.交叉编译
如何让hello world程序在我的NUC972板子上运行呢?
第一步:交叉编译,也就说在PC机的Ubuntu系统里编译一个能在NUC972平台上运行的程序。这里就不能使用Ubuntu默认的gcc编译工具了。需要使用交叉编译工具链,我这里使用的是
arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2,在 网站下载的。
关于交叉编译和交叉编译链,这里多说两句。
解释什么是交叉编译之前,先要介绍下本地编译。在当前的PC下,X86的CPU下,直接编译出来程序,可以直接在当前的环境,即X86的CPU下运行。此时的编译,可以叫做本地编译。交叉编译,是一个和本地编译相对应的概念。所谓的交叉编译,就是在一种平台上编译,编译出来的程序,是放到别的平台上运行,即编译的环境,和运行的环境,不一样,属于交叉的,此所谓交叉编译,这个概念主要和嵌入式开发有关。我们原来做单片机开发,在Windows使用KEIL或者IAR编译,其实也是交叉编译,因为最终它是运行在单片机里的。
要在X86平台编译出非X86平台运行的程序,就得需要交叉编译链,给定一个CPU/SOC,如何确定其所用的交叉工具链呢?
主要逻辑是先确定该CPU/SOC所用的CPU内核,然后根据对应的CPU内核,去找其对应的,可用的交叉工具链。比如我们这里用的:NUC972
我们可以查到:
它是基于ARM926的内核的。
所以我们要去找支持ARM926内核的交叉工具链。
进一步,通过ARM926 处理器,我们了解到ARM926的内核架构是ARMv5TEJ,所以我们去找,支持ARMv5的交叉编译器或者是支持ARMv5TEJ的交叉编译器。
常见的交叉编译工具链介绍,大家可参考: ,有一点大家一定要明确的是,一定要确定你用的交叉编译链得支持你的CPU架构。我当初编译NUC972就犯了大错,当时不了解这个,稀里糊涂的用了一个错的交叉编译工具,卡了好多天才搞定。
下面介绍实际操作了:
1) 把下载下来的
arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2放到我们上面说的共享目录里,然后我们在/home/topsemic 目录新建一个nuc972 文件夹,在nuc972 文件夹里再新建一个toolchain文件夹,使用mv指令把bz2文件移过来,之后解压bz2文件。最后结果如下:
2)修改环境变量,执行下面这句话
export PATH=$PATH:/home/topsemic/nuc972/toolchain/arm-2014.05/bin
为了方便起见,我把它放到
/nuc972/toolchain/environment.sh文件里了,以后要交叉编译,只需要source
/home/topsemic/nuc972/toolchain/environment.sh即可。
soure指令的功能是使Shell读入指定的Shell程序文件并依次执行文件中的所有语句。
在终端上输入命令 arm- 再按Tab键,可以看到下图,说明环境变量设置成功了
3)编译
使用命令:
arm-none-linux-gnueabi-gcc hello.c -o helloworld 编译
竟然报错了:提示
arm-none-linux-gnueabi-gcc: 没有
/home/topsemic/nuc972../bin 这个文件或目录,这是怎么回事,之前没遇到过啊。
上网一查说要需要安装lsb-core,执行sudo apt-get install lsb-core,安装完再编译就可以了。之前用的别人装好的虚拟机,应该都装过了,所以没有碰到这个问题。
至此,交叉编译工具就配置完成也能使用了。为了验证我们生成的helloworld确实是交叉编译的结果,我们可以试着直接虚拟机里执行下,它提示不可执行,
我们在用file指令查看该文件的类型,可以看到它是ARM平台下的。
同时用file看下第3节编译出来的hello,可以看到它是运行在x86-64平台下的。
4)下载
我们要把编译生成的可执行文件最终放到NUC972板子里,怎么实现呢?我这里使用的方法是这样:
1)先把helloworld复制到Windows系统,然后将板子通过网口和PC相连接,因为我的板子已经支持了ssh和scp,同时板子的网口IP固定为192.168.20.224.所以我只需要打开Winscp软件连接,直接将可执行文件放进去即可。Winscp软件使用不在这里详细介绍了,大家自行上网搜一下即可。
2)注意要修改可执行文件的权限,使它具有可执行权限,不然SecureCRT登录执行后,就会提示如下,Permission denied。SecureCRT是一款支持SSH(SSH1和SSH2)的终端仿真程序,简单地说是Windows下登录UNIX或Linux服务器主机的软件。这个我感觉类似Windows下的远程连接工具。有好多类似的工具,比如PUTTY、Xshell,大家随便用一种就行。具体使用方法也不在这里介绍了,不会的百度下即可。
最后成功的结果如下:
将helloworld放入到NUC972板子除了上面介绍的方法,还可以通过NFS(网络文件系统)实现,或者先把文件放到U盘里,然后把U盘插到NUC972板子上,挂载拷出文件也可以。我个人觉得上面的方法比较好用。当然如何让板子支持ssh和scp,在后面的文章中我会仔细再说。
6.结束语
经过这一篇文章的介绍,想必你已经基本掌握了如何编译一个程序,熟悉了gcc,搭建了交叉编译环境,另外也对如何把编译好的程序导入到嵌入式平台有了大概了解,同时又学习了几个新的linux命令。
如果你是原来做单片机的,要转换下思路,因为单片机比如要运行hello world,它是一整套代码一起下载到单片机里,然后运行。跑Linux的硬件,你可以把它类比做一台小电脑,电脑是要运行一个可执行程序需要先把该程序放到硬盘里,Linux嵌入式主机也是类似,你需要把hello world这个可执行程序先放到主机里,然后再运行它。
交叉编译这个概念,大家一定要理解了,当初我也是理解了好久才想明白。
大家有没有考虑过,为什么编译要在Ubuntu系统里,不在windows里编呢?另外为什么不直接在嵌入式系统里编译非要在外面的系统编译呢?大家可以思考。
下期会给大家介绍NUC972平台的移植。
相关推荐
- SM小分队Girls on Top,女神战队少了f(x)?
-
这次由SM娱乐公司在冬季即将开演的smtown里,将公司的所有女团成员集结成了一个小分队project。第一位这是全面ACE的大姐成员权宝儿(BoA),出道二十年,在日本单人销量过千万,韩国国内200...
- 韩国女团 aespa 首场 VR 演唱会或暗示 Quest 3 将于 10 月推出
-
AmazeVR宣布将在十月份举办一场现场VR音乐会,观众将佩戴MetaQuest3进行体验。韩国女团aespa于2020年11月出道,此后在日本推出了三张金唱片,在韩国推出了...
- 韩网热议!女团aespa成员Giselle在长腿爱豆中真的是legend
-
身高163的Giselle,长腿傲人,身材比例绝了...
- 假唱而被骂爆的女团:IVE、NewJeans、aespa上榜
-
在韩国,其实K-pop偶像并不被认为是真正的歌手,因为偶像们必须兼备舞蹈能力、也经常透过对嘴来完成舞台。由于科技的日渐发达,也有许多网友会利用消音软体来验证K-pop偶像到底有没有开麦唱歌,导致假唱这...
- 新女团Aespa登时尚大片 四个少女四种style
-
来源:环球网
- 韩国女团aespa新歌MV曝光 画面梦幻造型超美
-
12月20日,韩国女团aespa翻唱曲《DreamsComeTrue》MV公开,视频中,她们的造型超美!WINTER背后长出一双梦幻般的翅膀。柳智敏笑容甜美。宁艺卓皮肤白皙。GISELLE五官精致...
- 女网友向拳头维权,自称是萨勒芬妮的原型?某韩国女团抄袭KDA
-
女英雄萨勒芬妮(Seraphine)是拳头在2020年推出的第五位新英雄,在还没有正式上线时就备受lsp玩家的关注,因为她实在是太可爱了。和其他新英雄不同的是,萨勒芬妮在没上线时就被拳头当成虚拟偶像来...
- 人气TOP女团是?INS粉丝数见分晓;TWICE成员为何在演唱会落泪?
-
现在的人气TOP女团是?INS粉丝数见分晓!现在爱豆和粉丝之间的交流方法变得多种多样,但是Instagram依然是主要的交流手段。很多粉丝根据粉丝数评价偶像的人气,拥有数百、数千万粉丝的组合作为全球偶...
- 韩国女团MVaespa Drama MV_韩国女团穿超短裙子跳舞
-
WelcometoDrama.Pleasefollow4ruleswhilewatchingtheDrama.·1)Lookbackimmediatelywhenyoufe...
- aespa师妹团今年将出道! SM职员亲口曝「新女团风格、人数」
-
记者刘宛欣/综合报导南韩造星工厂SM娱乐曾打造出东方神起、SUPERJUNIOR、少女时代、SHINee、EXO等传奇团体,近年推出的aespa、RIIZE更是双双成为新生代一线团体,深受大众与粉丝...
- 南韩最活跃的女团aespa,新专辑《Girls》即将发布,盘点昔日经典
-
女团aespa歌曲盘点,新专辑《Girls》即将发布,期待大火。明天也就是2022年的7月8号,aespa新专辑《Girls》即将发行。这是继首张专辑《Savage》之后,时隔19个月的第二张专辑,这...
- 章泽天女团aespa出席戛纳晚宴 宋康昊携新片亮相
-
搜狐娱乐讯(山今/文玄反影/图科明/视频)法国时间5月23日晚,女团aespa、宋康昊、章泽天等明星亮相戛纳晚宴。章泽天身姿优越。章泽天肩颈线优越。章泽天双臂纤细。章泽天仪态端正。女团aespa亮...
- Aespa舞台暴露身高比例,宁艺卓脸大,柳智敏有“TOP”相
-
作为SM公司最新女团aespa,初舞台《BlackMamba》公开,在初舞台里,看得出来SM公司是下了大功夫的,虽然之前SM公司新出的女团都有很长的先导片,但是aespa显然是有“特殊待遇”。运用了...
- AESPA女团成员柳智敏karina大美女
-
真队内速度最快最火达成队内首个且唯一两百万点赞五代男女团中输断层第一(图转自微博)...
- 对来学校演出的女团成员语言性骚扰?韩国这所男高的学生恶心透了
-
哕了……本月4日,景福男子高中相关人士称已经找到了在SNS中上传对aespa成员进行性骚扰文章的学生,并开始着手调查。2日,SM娱乐创始人李秀满的母校——景福高中迎来了建校101周年庆典活动。当天,S...
- 一周热门
- 最近发表
-
- SM小分队Girls on Top,女神战队少了f(x)?
- 韩国女团 aespa 首场 VR 演唱会或暗示 Quest 3 将于 10 月推出
- 韩网热议!女团aespa成员Giselle在长腿爱豆中真的是legend
- 假唱而被骂爆的女团:IVE、NewJeans、aespa上榜
- 新女团Aespa登时尚大片 四个少女四种style
- 韩国女团aespa新歌MV曝光 画面梦幻造型超美
- 女网友向拳头维权,自称是萨勒芬妮的原型?某韩国女团抄袭KDA
- 人气TOP女团是?INS粉丝数见分晓;TWICE成员为何在演唱会落泪?
- 韩国女团MVaespa Drama MV_韩国女团穿超短裙子跳舞
- aespa师妹团今年将出道! SM职员亲口曝「新女团风格、人数」
- 标签列表
-
- filter函数js (37)
- filter函数excel用不了 (73)
- 商城开发 (40)
- 影视网站免费源码最新版 (57)
- 影视资源api接口 (46)
- 网站留言板代码大全 (56)
- java版软件下载 (52)
- java教材电子课本下载 (48)
- 0基础编程从什么开始学 (50)
- java是用来干嘛的 (51)
- it入门应该学什么 (55)
- java线上课程 (55)
- 学java的软件叫什么软件 (38)
- 程序开发软件有哪些 (53)
- 软件培训 (59)
- 机器人编程代码大全 (50)
- 少儿编程教程免费 (45)
- 新代系统编程教学 (61)
- 共创世界编程网站 (38)
- 亲测源码 (36)
- 三角函数积分公式表 (35)
- 函数的表示方法 (34)
- 表格乘法的公式怎么设置 (34)
- sumif函数的例子 (34)
- 图片素材 (36)
