【嵌入式Linux】开发环境搭建

news2024/11/25 2:40:23

一、概述

在进行某一个芯片平台开发前,一般都需要在电脑上安装一系列软件,然后在这些软件上阅读、编写、编译和调试在该平台上运行的代码,最后将编写好的代码通过某种方式烧录到该芯片的对应地址运行。在电脑上安装的这一系列软件的过程,就是开发环境的搭建的过程。

按照现在开发的实际情况,嵌入式Linux的开发一般都是在win的环境下搭建一个Linux的虚拟机,代码的编译调试和运行都需要依赖这个环境。一般操作都是在win下编写好代码,然后将代码放到Linux编译,最后将编译后生成的文件复制到win下,再讲这个文件烧录的芯片中运行,当然,也有直接可以在Linux下烧录代码的。是不是看着挺复杂,其实只要你熟练后,一切都挺简单。

我手上的这块开发板是某原子的,芯片平台是NXP的IMX6ULL,其内核为ARM的Cortex-A7。接下来的学习都将围绕他来进行。每款开发板或者芯片开发环境肯定都是有所差别的。

为什么选择IMX6ULL,有几个原因:
①他是ARM架构,是目前世界上应用最多的架构之一,学习他很有必要;
②他是单核32位芯片,对于熟悉stm32的人来说,非常合适,对于刚入嵌入式Linux开发的新手来说比多核更容易入手学习;
③某原子在开发板耕耘十几年,售后没得说,有技术支持,有人领路和没人领路完全是两码事,这点很重要(这不是打广告!)。

二、必备工具

1. Linux环境搭建

Linux系统是一个大的统称,Linux系统有很多发行版,常用的有Ubuntu、Red Hat、Debian、CentOS等,他们都属于Linux操作系统,都大同小异,使用方法几乎一样。这里我比较熟悉Ubuntu。在之前的博文中已经有安装教程了,这里不再赘述。
Ubuntu虚拟机搭建

2. VScode安装

VScode是一款功能十分强大的代码编辑器,它有着十分丰富的插件,几乎可以涵盖到当前所有流行的高级语言。

VScode有win下的,也有Linux下的,如果你熟悉在win下编写代码,就可以在win下安装它,你熟悉Linux,就可以在Linux下安装它。他的安装简单,网上一大把,傻瓜式安装的,完全免费(可能某些插件需要付费)。下面是我电脑VScode安装的插件,有需要的朋友可根据实际情况自己安装。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里建议大家安装的主要包括以下插件:

1) C/C++,这个肯定是必须的。
2) C/C++ Snippets,即 C/C++重用代码块。
3) C/C++ Advanced Lint,即 C/C++静态检测 。
4) Code Runner,即代码运行。
5) Include AutoComplete,即自动头文件包含。
6) Rainbow Brackets,彩虹花括号,有助于阅读代码。
7) One Dark Pro, VSCode 的主题。
8) GBKtoUTF8,将 GBK 转换为 UTF8。
9) ARM,即支持 ARM 汇编语法高亮显示。
10) Chinese(Simplified),即中文环境。
11) vscode-icons, VSCode 图标插件,主要是资源管理器下各个文件夹的图标。
12) compareit,比较插件,可以用于比较两个文件的差异。
13) DeviceTree,设备树语法插件。
14) TabNine,一款 AI 自动补全插件

3. ssh服务

ssh是一个登录远程服务器的软件,Linux安装指令:

sudo apt-get install openssh-server

也可以在VScode插件里面直接安装。

4. Linux下与win下文件互传

Linux与win之间文件互传的工具有很多,有兴趣的可以直接网上查找看看。这里只称述我使用的。
Windows 和 Ubuntu 下的文件互传我们需要使用 FTP 服务,设置方法如下:

4.1 开启Ubuntu下FTP服务

sudo apt-get install vsftpd

等待软件自动安装,安装完成以后使用如下 vim命令打开/etc/vsftpd.conf(没有vim请先安装vim:sudo apt-get install vim),命令如下:

sudo vim /etc/vsftpd.conf

打开以后 vsftpd.conf 文件以后找到如下两行:

local_enable=YES
write_enable=YES

然后把前面的“#”号去掉。修改完 vsftpd.conf 以后保存退出,使用如下命令重启 FTP 服务:

sudo /etc/init.d/vsftpd restart

4.2 win下FTP服务开启

win下直接安装FTP客户端,这里使用的是 FileZilla,这是个免费的 FTP 客户端软件,可以在 FileZilla官网下载:
FileZilla

都安装好之后,就可以用这个来进行win和Linux下文件的交互了。

5. 串口驱动

串口驱动有很多种,比如常用的CH340系列、FT232、CP2102等。我们需要根据自己板子的实际情况安装对应的驱动即可,网上资源很多,不再赘述。

6. 交叉编译工具链

一般做嵌入式Linux开发,特别是驱动开发的,大概率都要安装交叉编译器,什么是交叉编译器呢?
这里直接给出结论:
交叉编译器就是在一种架构上可以编译另外一种架构的代码的一组软件。
我们在电脑上安装的Ubuntu 自带的编译C语言的编译器是 gcc 编译器,是针对 X86 架构的,而我们现在要编译的代码是需要在是 Cortex-A7内核芯片上运行,Cortex-A7内核属于ARM 架构,所以我们需要一个在 X86 架构的 PC 上运行,可以编译 ARM 架构代码的编译器。
交叉编译器有很多种,我们使用 Linaro 出品的交叉编译器, Linaro 一间非营利性质的开放源代码软件工程公司, Linaro 开发了很多软件,最著名的就是 Linaro GCC 编译工具链(编译器)。有兴趣了Linaro 的朋友可以自行百度。
Linaro GCC 编译工具链
在这里插入图片描述
在X86架构64位PC机上编译ARM架构的代码,选择上图红色框起来的编译器即可。如果你的PC是32位的,那就选择这个:
在这里插入图片描述
将这个编译器下载下来后,将其拷贝到虚拟机下,把他移动到你想要存放的位置,然后需要将其配置到环境中去,以便可以在终端中可以输入命令使用。
例如:
在 Ubuntu 中创建目录: /usr/local/arm,命令如下:

sudo mkdir /usr/local/arm

创建完成以后将刚刚拷贝的交叉编译器复制到/usr/local/arm 这个目录中,在终端使用命令“ cd ” 进 入 到 存 放 有 交 叉 编 译 器 的 目 录 , 比 如我 前 面 将 交 叉 编 译 器 拷 贝 到 了 目 录“/home/lhsmd/linux/tool”中,然后使用如下命令将交叉编译器复制到/usr/local/arm 中:

sudo cp gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz /usr/local/arm/ -f

拷贝完成以后在/usr/local/arm 目录中对交叉编译工具进行解压,解压命令如下:

sudo tar -vxf gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz

等待解压完成,解压完成以后会生成一个名为“gcc-linaro-4.9.4-2017.01-x86_64_arm-linuxgnueabihf”的文件夹,这个文件夹里面就是我们的交叉编译工具链。
修改环境变量,使用 vim 打开/etc/profile 文件,命令如下:

sudo vim /etc/profile

打开/etc/profile 以后,在最后面输入如下所示内容:

export PATH=$PATH:/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin

修改好以后就保存退出,重启 Ubuntu 系统,重启后,打开终端,输入:

arm-linux-gnueabihf-gcc -v

如果出现了版本号,就说明安装成功,如下:
在这里插入图片描述
arm-linux-gnueabihf-gcc的含义如下:

①arm 表示这是编译 arm 架构代码的编译器。
②linux 表示运行在 linux 环境下。
③gnueabihf 表示嵌入式二进制接口。
④gcc 表示是 gcc 工具。

7. 其他相关库安装

sudo apt-get install lsb-core lib32stdc++6

三、总结

不同的芯片可能需要安装不同的代码编译运行环境,比如交叉编译器等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/101124.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

知行之桥2022版本升级之页面变化以及监控邮件答疑

近期有些客户将知行EDI系统升级到了我们最新知行之桥2022版本,升级过程或者升级后对于新版本的使用会有些疑问,根据近期协助大家进行知行EDI系统升级遇到的问题,我们的运维团队整理了一些Q&A,将分为上下两篇分享给大家&#x…

深度学习入门(六十二)循环神经网络——双向循环神经网络

深度学习入门(六十二)循环神经网络——双向循环神经网络前言循环神经网络——双向循环神经网络课件未来很重要双向RNN推理总结教材1 隐马尔可夫模型中的动态规划2 双向模型2.1 定义2.2 模型的计算代价及其应用3 双向循环神经网络的错误应用4 小结前言 核…

排序算法之直接选择排序(图文详解)

文章目录一、选择排序思想二、排序过程详解2.1 排序的次数2.2 排序演示三、代码范例3.1 SelectSort函数3.2 整体代码实现3.3 结果展示四、选择排序分析4.1 稳定性4.2 复杂度4.3适用场景五、选泽排序优化总结一、选择排序思想 选择排序(Selection sort)是…

ABBYY15免费版直接编辑PDF格式文件

日常生活中,我们常常使用PDF格式的文件。其优点就是PDF的文本内容不会随着软件版本、电脑字体的变化而变化,保证了其完整性。但也正因为这一点,如果没有源文件,我们就很难对PDF文档的内容进行编辑了。今天,我就向大家展…

前端一面必会vue面试题(边面边更)

为什么要使用异步组件 节省打包出的结果,异步组件分开打包,采用jsonp的方式进行加载,有效解决文件过大的问题。核心就是包组件定义变成一个函数,依赖import() 语法,可以实现文件的分割加载。 components:{ AddCustom…

关于GitHub的.gitignore无法忽略 “default-2021.dwlt“ 文件的问题

问题描述 我在使用sourcetree往github提交工程时,UserSettings/Layouts/default-2021.dwlt文件无缘无故每次都被暂存。 尽管我在.gitignore文件中反复修改忽略路径,该文件始终无法被屏蔽。如下图 解决办法 在网上找了很多资料,最终找到了…

Qt扫盲-QListWidget理论总结

QListWidget理论总结1. 概念2. 添加列表项3. 列表其他属性4. 常用信号5. 槽函数6. QListWidgetItem 简述1. 概念 QListWidget 是一个继承自 QListView 的类,其实就是 QListView 的一个很经典的 列表 交互控件,在QListWidget 里面提供了非常方便的基于 每…

银树开花精美甘特图:VARCHART_XGantt_5.2_167_ActiveX

增强您的计划用户体验 使用交互式甘特图提供惊人的视觉调度体验 与时间和资源相关的计划数据(例如工作、任务、订单、活动和能力)最好显示在甘特图中。 在智能甘特图中,计划人员可以随手采取纠正措施。 加快您的开发并 创建引人入胜、易于使用…

爬虫学习-深入了解爬虫

爬虫深入 使用场景分类 通用爬虫:抓取系统的重要组成部分,抓取的是一整张页面数据聚焦爬虫:建立在通用爬虫的基础之上,抓取的是页面中特定的局部内容增量式爬虫:检测网站中数据更新的情况,只会抓取网站中最…

一起学习用Verilog在FPGA上实现CNN----(三)激活层设计

1 激活层设计 LeNet-5网络的激活函数是双曲正切函数(TanH),项目中tanh函数模块由完整的层UsingTheTanh构成,该层由较小的处理单元HyperBolicTangent组成 1.1 HyperBolicTangent 处理单元HyperBolicTangent,对每个输入执行Tanh操作&#xf…

jsp+ssm计算机毕业设计动物救助平台【附源码】

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: JSPSSM mybatis Maven等等组成,B/S模式 Mave…

实训任务4:Hadoop综合操作

文章目录1. 启动Hadoop服务2. 创建文本文件3. 上传文本文件4. 显示文件内容5. 完成排序任务6. 计算最大利润和平均利润1. 启动Hadoop服务 在master虚拟机上执行命令:start-all.sh 2. 创建文本文件 在master虚拟机上创建本地文件students.txt 李晓文 女 20 张晓航 男…

【Redis集群专题】「集群技术三部曲」分析一下相关的Redis集群模式下的脑裂问题(问题篇)

技术格言 世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。 什么是脑裂 字面含义 首先,脑裂从字面上理解就是脑袋裂开了,就是思想分家了,就是有了两个山头,就是有…

电脑调用 iPhone 摄像头全过程(iVCam)

最近不是停课不停学吗,令人“深恶痛绝”的钉钉又进入了我们学生的生活。但是初中的网课相比小学的又增加了一个要求:全程摄像头拍摄。但是,我这笔记本没有摄像头啊!突然想起来好像手机的摄像头可以给电脑调用。话不多说&#xff0…

3D数学基础 学习笔记

左手坐标系:DX、3DMax 右手坐标系:OpenGL 世界坐标系、物体坐标系、摄像机坐标系 向量和点在数学上是等价的,向量是有大小和方向的有向线段,向量没有位置,只有大小和方向 向量运算: 零向量:…

【看源码】@Cacheable和@CacheEvict的原理, 批量key过期失效的原因分析

Cacheable和CacheEvict的坑, 批量key过期失效的原因分析前言测试代码源码put缓存时最终key的产生看不同情况下, 是否能匹配Evict过期缓存1. 没有入参没有指定key的情况2. 有入参的情况3. 配置了allEntries的情况总结补充前言 最近发现自己搭的一个项目返回的数据不太准确, 第一…

网工Python之路——Netmiko模块实验(思科)

小白网工的python之路 「Python 网络自动化」Netmiko 实验环境 我的实验环境是GNS3搭建拓扑图,用云桥接到在VMware Workstation 16运行的CentOS 7, CentOS 7上搭建好了python3.8, 所有交换机已经预配好了SSH服务,ssh登录账号为python&…

paddle

paddle预测库 git config --global http.postBuffer 1048576000 git clone --recursive https://github.com/PaddlePaddle/Paddle.git 修改CMakeLists.txt mkdir build cd buildcmake -DWITH_CONTRIBOFF -DWITH_MKLOFF -DWITH_MKLDNNOFF -DWITH_TESTINGOFF -DCMAKE_BUILD_TY…

DBCO-PEG-Ferrocene,Ferrocene-PEG-DBCO,DBCO偶联修饰二茂铁

DBCO-PEG-Ferrocene ,Ferrocene-PEG-DBCO,二苯并环辛炔-聚乙二醇-二茂铁,DBCO偶联修饰二茂铁产品规格: 1.CAS号:N/A 2.分子量MV:1000、2000、3400、5000、10000、20000等可按需进行定制 3.包装规格&#xf…

数据结构与算法_空间复杂度

同时间复杂度一样,空间复杂度也是数学的函数表达式。 空间复杂度不是程序占用了多少 bytes的空间,因为这个也没太大意义,所以空间复杂度算的是运行的过程中临时的、额外的变量的个数。 空间复杂度计算规则基本跟实践 复杂度类似&#xff0c…