1.嵌入式Linux
嵌入式Linux是对运行在嵌入式设备上的Linux的统称,它们都是经过高度裁剪、具备特定功能的嵌入式Linux操作系统。
嵌入式设备性能、资源有限,所以不能将标准的Linux应用到嵌入式和设备上,所以对标准的Linux进行内核裁剪,针对某一个特定的功能进行完善,就可以应用到嵌入式设备上,主要有两种:
- 小型化:针对大小进行改进,eg.ETLinux、uLinux、ThinLinux等
- 实时化:针对实时性进行改进,eg.RTLinux、RTAI等
2.嵌入式Linux的开发方向
嵌入式Linux的开发主要有以下三个:
- 内核开发:裁剪Linux,适配驱动,目的是可以运行起来Linux;
- 应用开发:在运行起来Linux的基础上,进行应用开发;
这里我们先从应用开发入手,待学会基本开发再学习内核开发也不迟~
3.嵌入式Linux的开发模型
- 宿主机用来开发程序
- 目标板用来运行程序
4.嵌入式Linux应用开发硬件环境
- 已经运行起来Linux的开发板
- 串口:用于Linux终端
- 网口:用于SSH、文件传输、远程调试程序
这里我使用的硬件平台是NXP的iMX287。
5.嵌入式Linux应用开发软件环境
5.1.交叉编译工具链
宿主机运行的是标准Linux操作系统,编译出的程序却需要在目标机的Linux上跑,这就叫交叉编译,需要使用交叉编译器,之前我们已经使用过arm-none-eabi-gcc
编译STM32的程序,这个编译器的目标系统是ARM,不运行操作系统,仅运行前后台程序,这里我们ARM开发板运行了Linux操作系统,所以不能使用这个编译器,需要使用arm-none-linux-gnueabi-gcc
交叉编译器。
5.2.安装交叉编译器
arm-none-linux-gnueabi-gcc下载
下载解压版:
解压:
tar -jxvf arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
移动到/usr下面:
进入目录查看,bin下存放着我们需要的工具:
将这个位置添加到用户环境变量,使用vim ~/.bashrc
,然后再最后添加:
export PATH=$PATH:/usr/arm-2014.05/bin
然后使用命令source ~/.bashrc
更新系统路径,使添加的环境变量立即生效:
然后输入arm-none-linux
,连按tab
,检查是否可以自动补全,如果可以,则安装成功:
如果是64位操作系统,这个时候还不能使用,只能自动补全,但不能执行:
解决方案 —— 安装库:
sudo apt-get install libc6-i386
再次查看gcc版本,成功:
5.3.使用交叉编译器
arm-none-linux-gnueabi-gcc和之前的gcc使用无太大差异,示例如下。
先编辑文件:
然后使用交叉工具链编译:
编译完成后,接下来我们配置网络环境,通过网络将生成的可执行文件传递到目标板上运行。
6.嵌入式Linux应用开发串口环境
- 将开发板命令行输出串口连接到电脑上(通过USB转串口);
- 电脑上使用终端软件连接串口(不建议使用串口助手);
7.嵌入式Linux应用开发网络环境
参考之前这篇Ubuntu远程访问和文件传输 | 配置SSH和VNC服务
7.1.前提
1.开发板已连接上可以正常上网的路由器
使用udhcpc
开启自动获取ip:
然后使用ifconfig
查看网络状态:
使用route
查看路由表:
ping一下百度(61.135.169.105)
,测试是否可以连接外网:
2.开发板和windows互ping,检测网络:
在windows命令行中使用ipconfig
查看ip地址,然后ping开发板:
开发板ping windows主机:
- 配置虚拟机网络使用桥接模式(必须,使用NAT模式无法连接开发板)
查看虚拟机ip地址:
7.2.使用SSH进行远程登录和文件传输
-
首先使用
sshd
命令查看开发板sshd状态(如图表示开启):
-
在windows主机上使用xshell登录开发板
如果不想使用这种创建的方式,也可以直接使用命令:
ssh <用户名>@<ip地址>
- 在windows主机上使用winscp通过ssh进行文件传输
这样就可以在windows主机和开发板之间传递文件了(同样,可以在windows主机和虚拟机之间传文件)。
-
在虚拟机Linux上使用ssh登录开发板
-
在虚拟机Linux上使用ssh传送文件到开发板