
Linux开发环境
liunx开发环境搭建,与系统介绍
前言
主要介绍Ubuntu的安装、Linux基础知识及ARM的linux开发环境搭建。
一、Linux系统安装
1.1 虚拟机安装
电脑也可以直接装Linux系统,但是一个是双系统使用起来不方便,二个第一次使用Linux系统可能错误操作导致系统崩溃。其次,很多开发工具和是在Windows系统,这样来回切换很不方便。所以选择安装虚拟机,然后在虚拟机内安装linux系统,当然有两台电脑的可以自行选择
虚拟机的实现我们可以借助其他软件,比如 Vmware Workstation,Vmware Workstation 是收费软件,免费的虚拟机软件有 Virtualbox。这里我们使用 Vmware Workstation 软件来做虚拟机。Vmware Workstation 软件可以在 Wmeare 官网下载,下载地址(具体安装不做过多介绍):
https://www.vmware.com/products/workstation-pro/workstation-pro-evaluation.html
1.2 Linux系统安装
前面虚拟机已经创建成功了,相当于硬件已经准备好了,接下来就是要在虚拟机中安装Linux系统,LInux系统有很多版本,这里我们选择Ubuntu 系统,因为它有很好的交互界面和稳定性。首先肯定是获取到 Ubuntu 的系统镜像,下载地址为:https://www.ubuntu.com/download/desktop,这里我们选择的是16.04版本的Ubuntu:http://releases.ubuntu.com/16.04/,具体安装步骤不介绍了,主要下面姓名和计算机名尽可能短点,否则命令行前缀太长
1.3 安装增强工具
Mware Tools是VMware虚拟机中自带的一种增强工具,相当于VirtualBox中的增强功能(Sun VirtualBox Guest Additions),是VMware提供的增强虚拟显卡和硬盘性能、以及同步虚拟机与主机时钟的驱动程序。只有在VMware虚拟机中安装好了VMware Tools,才能实现主机与虚拟机之间的文件共享,同时可支持自由拖拽的功能,鼠标也可在虚拟机与主机之前自由移动(不用再按ctrl+alt),且虚拟机屏幕也可实现全屏化。
点击虚拟机-安装VMware Tool,在Ubuntu桌面生成一个DAD光盘,将tar.gz格式压缩包复制到home文件夹里,右击打开终端运行install.pl
sudo ./vmware-install.pl
输入密码不会显示,要自己默数,然后第一个选y,后面直接回车默认
二、Ubuntu系统基础知识
2.1 系统设置
- 显示界面设置
刚进去发现页面很小,不能放大,分辨率低。首先设置显示页面大小,在虚拟机设置拉伸选项
再设置系统分辨率,在显示设置里,根据自己需要换分辨率,此时确认入口在右下角那一点点 - 软件更新设置
打开软件和更新,在Ubuntu软件选项卡里,设置系统和软件更新的源地址,在服务器里选择其他站点,可以选择清华或者阿里云(设置完成后可能需要输入密码)
再设置更新频率
2.2 Shell操作
所谓的Shell操作就是在终端里敲命令,Ubuntu里我们可以使用快捷键Ctrl+Alt+T打开新终端,输入命令时可以使用Tab键补全命令
常用Linux操作命令如下:
1)cd 改变目录;
2)cd . . 回退到上一个目录
3)pwd 显示当前所在的目录路径。
4)ls(ll) 都是列出当前目录中的所有文件,只不过ll(两个ll)列出的内容更为详细。
5)clear 清屏。
6)touch 新建一个文件 如 touch index.js 就会在当前目录下新建一个index.js文件。
7)cat 显示文件内容命令
8)rm: 删除一个文件, rm index.js 就会把index.js文件删除。
9)mkdir 新建一个文件夹。
10)sudo 切换用户执行身份命令
11)adduser 添加用户命令
12)deluser 删除用户命令
13)su 切换用户命令
14)history 查看命令历史。
15)ifconfig 显示和配置网络属性命令
16)man 系统帮助命令
17)help 帮助。
18)poweroff 系统关闭命令
19)exit 退出。
20)#表示注释
2.3 Linux文件系统
整个 Linux 系统有且只有一棵从根目录开始的目录树,如下图所示:
文件名 | 文件类型 |
---|---|
/bin | 存储一些二进制可执行命令文件,/usr/bin 也存放了一些基于用户的命令文件。 |
/sbin | 存储了很多系统命令,/usr/sbin 也存储了许多系统命令。 |
/root | 超级用户 root 的根目录文件。 |
/home | 普通用户默认目录,在该目录下每个用户都有一个以本用户名命名的文件夹 |
/boot | 存放 Ubuntu 系统内核和系统启动文件。 |
/mnt | 通常包括系统引导后被挂载的文件系统的挂载点 |
/dev | 存放设备文件,我们后面学习 Linux 驱动主要是跟这个文件夹打交道的。 |
/etc | 保存系统管理所需的配置文件和目录。 |
/lib | 保存系统程序运行所需的库文件,/usr/lib 下存放了一些用于普通用户的库文件。 |
/lost+found | 一般为空,当系统非正常关机以后,此文件夹会保存一些零散文件。 |
/var | 存储一些不断变化的文件,比如日志文件 |
/usr | 包括与系统用户直接有关的文件和目录,比如应用程序和所需的库文件。 |
/media | 存放Ubuntu系统自动挂载的设备文件。 |
/proc | 虚拟目录,不实际存储在磁盘上,通常用来保存系统信息和进程信息。 |
/tmp | 存储系统和用户的临时文件,该文件夹对所有的用户都提供读写权限。 |
/opt | 可选文件和程序的存放目录。 |
/sys | 系统设备和文件层次结构,并向用户程序提供详细的内核数据信息。 |
文件操作的一些常用命令:
# 创建新文件命令—touch,para:
# -a 只更改存取时间。
# -c 不建立任何文件。
# -d<日期> 使用指定的日期,而并非现在日期。
# -t<时间> 使用指定的时间,而并非现在时间。
touch <参数> <文件名>
# 文件夹创建命令—mkdir,
# para:-p 如所要创建的目录其上层目录目前还未创建,那么会一起创建上层目录。
mkdir [参数] [文件夹名目录名]
# 文件及目录删除命令—rm
rm [参数] [目的文件或文件夹目录名]
# 文件夹(目录)删除命令—rmdir
rmdir [参数] [文件夹(目录)]
# 文件复制命令—cp
cp [参数] [源地址] [目的地址]
# 文件移动命令—mv
mv [参数] [源地址] [目的地址]
# find 命令用于在目录结构中查找文件
find [路径] [参数] [关键字]
# grep 命令用于查找包含指定关键字的文件
grep [参数] 关键字 文件列表
2.4 Linux权限管理与磁盘管理
2.4.1 Linux用户权限管理
Ubuntu 下用户类型分为以下 3 类,每个用户都有一个 ID 号,称为 UID,操作系统通过 UID 来识别是哪个用户,用户相关信息可以在文件/etc/passwd 中查看到
- 初次创建的用户,此用户可以完成比普通用户更多的功能。
- root 用户,系统管理员,系统中的玉皇大帝,拥有至高无上的权利。
- 普通用户,安装完操作系统以后被创建的用户。
文件的权限有三种:读( r)、写(w)和执行(x),将三种权限 r、w 和 x进行不同的组合,即可得到不同的二进制数和八进制数
有时候需要修改文件时会提示权限不够,我们也可以使用 Shell 来操作文件的权限管理,主要用到“chmod”和“chown”这两个命令。Linux系统下,每个文件有三个权限,分别是文件权限与用户和用户组之间的关系,所以修改权限需要三个八进制。在使用前需要使用“sudo”命令暂时将身份切换到 root 用户或者“su”切换用户,具体命令如下:
# 权限修改命令 chmod,para:
# -c 效果类似“-v”参数,但仅回显更改的部分。
# -f 不显示错误信息。
# -R 递归处理,指定目录下的所有文件及其子文件目录一起处理。
# -v 显示指令的执行过程。
sudo chmod <参数> <文件名/目录名>
# 文件归属者修改命令 chown,para:
# -c 效果同-v 类似,但仅显示更改的部分。
# -f 不显示错误信息。
# -h 只对符号连接的文件做修改,不改动其它任何相关的文件。
# -R 递归处理,将指定的目录下的所有文件和子目录一起处理。
# -v 显示处理过程。
sudo chown <参数> [用户名.<组名>] [文件名/目录]
2.4.2 Linux磁盘管理
Linux 的磁盘管理体系和 Windows 有很大的区别,在 Windows 下经常会遇到“分区”这个概念,在 Linux 中一般不叫“分区”而叫“挂载点”。跟磁盘操作有关的命令如下:
# 磁盘分区命令 fdisk,para:
# -b<分区大小> 指定每个分区的大小。
# -l 列出指定设备的分区表。
# -s<分区编号> 将指定的分区大小输出到标准的输出上,单位为块。
# -u 搭配“-l”参数,会用分区数目取代柱面数目,来表示每个分区的起始地址。
fdisk [参数]
# 格式化命令 mkfs,para:
# fs 指定建立文件系统时的参数
# -V 显示版本信息和简要的使用方法。
# -v 显示版本信息和详细的使用方法。
mkfs [参数] [-t 文件系统类型] [分区名称]
# 挂载分区命令 mount,para:
# -V 显示程序版本。
# -h 显示辅助信息。
# -v 显示执行过程详细信息。
# -o ro 只读模式挂载。
# -o rw 读写模式挂载。
# -s-r 等于-o ro。
# -w 等于-o rw。
mount [参数] -t [类型] [设备名称] [目的文件夹]
# 卸载命令 umount
umount [参数] -t [文件系统类型] [设备名称]
2.5 apt及yum包管理工具
2.5.1 APT下载工具
APT 采用的 C/S 模式,也就是客户端/服务器模式,首先设置更新源(这个在2.1已经设置)。APT 工具常用的命令如下:
sudo apt-get update #更新本地数据库
sudo apt-get check #检查依赖关系,所谓依赖关系就是 A 软件依赖于 B 软件
sudo apt-get install <package-name> #软件安装,安装中会提示是否继续
sudo apt-get upgrade <package-name> #软件更新
sudo apt-get remove package-name #卸载软件
2.5.2 软件包与包管理工具
在 Linux 操作系统中,最常见的两种包分别是 deb 和 rpm。
- deb 包、dpkg 及 apt
在 Debian、Ubuntu 等 Linux 发行版中,通常使用 deb(debian)形式的软件包,deb是软件包,dpkg是手动安装工具,apt是自动安装工具,安装命令如下:
sudo dpkg -i xxxx.deb # 使用dpkg手动安装deb包的命令
sudo apt-get install 软件名 #安装软件包,apt会自动下载
apt-get remove 软件包名 #卸载
- rpm 包、rpm 及 yum
在RedHat,Fedora,Centos 等派系的 Linux 发行版中,通常使用 rpm(RedHat PackageManager) 形式的软件包,
rpm -ivh xxxx.rpm # 安装xxxx.rpm软件包
yum install 软件名 # 使用 yum 安装软件的命令如下,它会自动下载并完成安装
三、开发环境搭建
主要是Windows和Linux软件安装
3.1 VI/VIM编辑器
gedit是在Ubuntu系统下的地位就如同 Windows 系统下的记事本软件,它的功能不算强大,但因为是系统自带的,说不上什么时候我们就会图方便使用它用来轻度编辑和记录一些内容。
gedit 要打开或新建的文件名
我们如果要在终端模式下进行文本编辑或者修改文件就可以使用 VI/VIM 编辑器,Ubuntu自带了 VI 编辑器,VIM 编辑器是VI编辑器升级版本,VI/VIM 编辑器都是一种基于指令式的编辑器,首先安装 VIM 编辑器:
sudo apt install vim
sudo vi /etc/vim/vimrc #对vim的配置如下:
set ts=4 #设置TAB为4个空格
set nu #设置显示行号
set noexpandtab #禁止用空格代替TAB键
使用vi命令会创建或打开文件,但是发现根本打不了字,此时先输入以下命令切换到输入模式:
命令 | 作用 |
---|---|
i | 在当前光标所在字符的前面,转为输入模式。 |
I | 在当前光标所在行的行首转换为输入模式。 |
a | 在当前光标所在字符的后面,转为输入模式。 |
A | 在光标所在行的行尾,转换为输入模式。 |
o | 在当前光标所在行的下方,新建一行,并转为输入模式。 |
O | 在当前光标所在行的上方,新建一行,并转为输入模式。 |
s | 删除光标所在字符。 |
r | 替换光标处字符。 |
一般使用的是a
命令,此时就可以输入上面的配置内容,结束之后再按下Esc就可以进入指令模式,此时可以使用控制文本的指令:
命令 | 功能 |
---|---|
h(或左方向键) | 光标左移一个字符。 |
l(或右方向键) | 光标右移一个字符。 |
j(或下方向键) | 光标下移一行。 |
k(或上方向键) | 光标上移一行。 |
nG | 光标移动到第 n 行首。 |
n+ | 光标下移 n 行。 |
n- | 光标上移 n 行。 |
Ctrl+f | 屏幕向下翻一页,相当于下一页。 |
Ctrl+b | 屏幕向上翻一页,相当于上一页。 |
cc | 删除整行,并且修改整行内容。 |
dd | 删除该行,不提供修改功能。 |
ndd | 删除当前行向下 n 行。 |
x | 删除光标所在的字符。 |
X | 删除光标前面的一个字符。 |
nyy | 复制当前行及其下面 n 行。 |
p | 粘贴最近复制的内容。 |
最后结束后可以在指令模式下输入:
进入底部模式,然后输入以下命令退出:
命令 | 功能 |
---|---|
x | 保存当前文档并且退出 |
q | 退出。 |
w | 保存文档。 |
q! | 退出 VI/VIM,不保存文档 |
一般情况下输入wq
退出并保存
3.2 FTP环境搭建
Windows和Ubuntu下的文件互传我们需要使用FTP服务,设置方法如下:
# 安装FTP服务
sudo apt-get install vsftpd
# 配置FTP
sudo vi /etc/vsftpd.conf
打开 vsftpd.conf 文件以后找到如下两行:
local_enable=YES
write_enable=YES
修改完 vsftpd.conf 以后保存退出,使用如下命令重启 FTP 服务:
sudo /etc/init.d/vsftpd restart
linux配置好FTP后,在Windows安装FileZilla就可以实现文件互传,下载链接:https://www.filezilla.cn/download,下载安装好之后,点击:文件->站点管理器,进行如下设置,设置好了之后就可以使用FileZilla传送文件了
3.3 编译器工具安装
-
交叉编译器安装(有时候存在没用的情况换4.9版本)
gcc版本选择:arch [-os] [-(gnu)eabi(hf)] -gcc
x86_64是64位,i686为32位,arch为目标芯片架构,os为操作系统,gnu为C标准库类型,eabi为应用二进制接口,hf为浮点模式
1)sudo apt install gcc-arm-linux-gnueabihf
2)修改环境变量(根据对应情况做修改)
①sudo vi /etc/profile
②export PATH=$PATH:/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin
3)安装工具及相关库
①sudo apt-get install lsb-core lib32stdc++6(正点原子)
②sudo apt install bison flex libssl-dev dpkg-dev lzop (野火) -
gcc编译器
sudo apt install gcc #安装gcc编译器
sudo apt install g++ #安装c++编译器
gcc -v #查看版本号
which gcc #查看安装路径
gcc组成部分:
- gcc-core:即GCC 编译器,用于完成预处理和编译过程,例如把C 代码转换成汇编代码。
- Binutils工具集:as(汇编器)、ld(链接器)、readelf(查看信息)等位于/usr/bin目录
- glibc库:是GNU 组织为GNU 系统以及Linux 系统编写的C 语言标准库
整个编译过程:hello.c(预处理-E)→hello.i(编译-S)→hello.s(汇编-c)→hello.o(链接-o)→hello(可执行文件)。gcc 命令格式如下:
gcc [选项] [文件名字]
主要选项如下:
- -c:只编译不链接为可执行文件,编译器将输入的.c 文件编译为.o 的目标文件。
- -o:<输出文件名>用来指定编译结束以后的输出文件名,如果不使用这个选项的话 GCC 默认编译出来的可执行文件名字为 a.out。
- -g:添加调试信息,如果要使用调试工具(如 GDB)的话就必须加入此选项,此选项指示编译的时候生成调试所需的符号信息。
- -O:对程序进行优化编译,如果使用此选项的话整个源代码在编译、链接的的时候都会进行优化,这样产生的可执行文件执行效率就高。
- -O2:比-O 更幅度更大的优化,生成的可执行效率更高,但是整个编译过程会很慢。
gcc hello.c -o hello #使用gcc把hello.c编译称hello
gcc hello.c -o hello --static #静态编译,没有库也能运行
- make与CMake工具安装
sudo apt install make # make安装
sudo apt-get install cmake #安装CMake
3.4 SSH环境搭建
- Ubuntu的SSH服务
SSH服务开启后就可以在Windows使用终端软件登录到Ubuntu,比如使用MobaXterm或者Xshell
# Ubuntu下使用如下命令开启SSH服务
sudo apt-get install openssh-server
# ssh的配置文件为/etc/ssh/sshd_config,使用默认配置即可
-
开发板的SSH服务
①开发板上电输入sudo systemctl status ssh查看ssh服务是否已经运行
②网线连接登录进去,开发板运行
(1)mv /etc/network/interfaces /etc/network/interfaces.save #重命名文件
(2)systemctl enable systemd-networkd #使能服务
(3)在/etc/systemd/network目录下增加需要配置的网卡配置信息文件,文件以.network 后缀作为结尾。如新建一个配置网卡eth1 文件eth1.network。 -
串口中断登录开发板默认开启
3.5 NFS环境搭建
NFS网络文件系统,可以在Ubuntu上制作开发板的根文件系统,然后使用NFS来加载根文件系统到开发板的DDR上
# 在ubuntu安装NFS服务
sudo apt install nfs-kernel-server
# 配置NFS
sudo vim /etc/exports
最后添加(根据具体情况配置路径以及IP)
/home/embedfire/workdir 192.168.0.0/24(rw,sync,all_squash,anonuid=998,anongid=998,no_subtree_check)
# 创建共享目录
mkdir /home/embedfire/workdir
# 更新exports配置
sudo exportfs -arv
# 查看NFS服务器加载情况
showmount -e
# 在开发板上搭建NFS文件系统
sudo umount /mnt
3.6 TFTP环境搭建
3.7 VSCode编辑器
- 安装VSCode
sudo snap install code #安装VSCode
sudo code 文件名 –user-data-dir #使用VS Code修改配置文件
- 插件安装:
(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)GBKtoUTF8,将GBK转换为UTF8。
(8)ARM,即支持ARM汇编语法高亮显示。
(9)Chinese(Simplified),即中文环境。
(10)vscode-icons,VSCode图标插件,主要是资源管理器下各个文件夹的图标。
(11)DeviceTree,设备树语法插件。
(12)TabNine,一款AI自动补全插件,强烈推荐,谁用谁知道! - VScode的设置
①设置里搜索预览→取消选中Enable Preview - 创建.vscode文件夹
①c_cpp_properties.json的配置文件
(1)includePath:用于指定工程头文件路径
②新建一个名为“settings.json”
(1)其中"search.exclude"里面是需要在搜索结果中排除的文件或者文件夹
(2)"files.exclude"是左侧工程目录中需要排除的文件或者文件夹
补充
有关linux环境ARM开发见以下文章
https://blog.csdn.net/weixin_44567668/article/details/134744956
更多推荐
所有评论(0)