嵌入式Linux开发环境搭建
目录
在学习嵌入式Linux开发之前,我们首先需要做一些准备工作,搭建硬件、软件开发环境。
一、硬件环境搭建
1.1 交叉开发模式
在开发PC机程序时,可以直接在PC机上编辑、编译、调试软件,最终发布的软件也可以在PC机运行。而对于嵌入式开发,最初的嵌入式设备是一个空白的系统,需要通过主机为它构建基本的软件系统,并烧写到设备中。另外,嵌入式设备的资源并不足以用来开发软件。所以需要用到交叉开发模式:在主机上编辑、编译软件,然后在目标机上运行、验证程序。
1.2 硬件要求
首先我们需要有一个PC主机、目前的PC机基本都可以满足我们的开发要求,就不做过多的介绍。
其次我们需要有一块开发板。目前市面上的开发板有很多,这里我们就以友善之臂Mini2440开发板为例,主要是因为我们还处于学习阶段,而这款芯片毕竟经典,网上资料也很多,方便我们学习。
二、软件环境搭建
2.1 VMware安装
VMware Workstation Pro 15中文破解版下载地址:http://www.zdfans.com/html/16025.html。
下载并解压,得到安装程序和注册文件:
双击VMware-workstation-full-15.0.0-10134415.exe运行安装,点击下一步:
勾选我接受许可协议中的条款,点击下一步:
点击更改选择软件安装路径,点击下一步:
选择需要安装的快捷方式,点击下一步:
点击安装按钮开始安装:
完成中,安装完成后点击许可证按钮:
运行keygen.exe注册机,将生成的许可证密钥复制到软件中,点击输入按钮
破解完成,运行软件就可以免费使用了。
2.2 ubuntu安装
嵌入式linux开发以及深度学习开发一般使用ubuntu居多,而centos一般作为web服务器使用。本节以ubuntu20.04.2.0安装为例,下载地址http://mirrors.163.com/ubuntu-releases/。
(1) 打开WMware,在vmware主界面的“主页”标签点击创建虚拟机向导。如下图所示。
(2) 向导界面选择“自定义高级”,如下图所示:
(3) 然后下一步,兼容性选择当前vmware版本,比如本人是15版就选择15版。如果要分发虚拟机给别人使用,就选择别人的版本。如下所示。
(4) 下一步,选择稍后安装操作系统,如下所示
(5) 选择客户机操作系统:
(6) 下一步,虚拟机名称可以随便取。“位置”就是将来虚拟机文件所在的目录,因为虚拟机文件比较大,要选择一个磁盘空间比较大的目录
(7) 下一步,设置要分配给虚拟机的CPU,电脑配置高的可以往上调,如果要同时运行两个以上虚拟机就少分配一点,一般采用默认值就可以:
(8) 下一步,Ubuntu内存配置:
(9)、网络配置,采用桥接网络:
(10) 硬盘控制器,没有特殊情况就选默认值:
(11) 硬盘类型,没有特殊情况就选默认值:
(12) 创一个新的磁盘,如果使用单独物理磁盘的选第三项:
(13) 磁盘空间,一般默认20G就够了,如果要装的软件特别多就多分配一点,一般空的Ubuntu16装完占用10G左右,剩10G软件空间:
(14)、磁盘文件名,没有什么影响随便去一个就好了
(15) 到这一步就创建完一个虚拟机了,如下。如果对刚才的配置不满意可以点“自定义”进一步修改:
(16) 在启动虚拟机前进行虚拟机设置:
要在这里选择你的iso文件。然后启动操作系统,开始真正的系统安装。
(16) 语言选择简体中文,点击安装ubuntu:
(17) 点击继续:
(18) 然后选择清除整个磁盘并安装ubuntu:
(19) 点击继续:
(19) 设置登录密码为123456:
等待完成之后重启就行了!!!
三、ubuntu配置
3.1 修改root密码
修改root密码(123456aa):
sudo passwd root
sudo 它允许系统管理员分配给普通用户一些合理的权力,让他们执行一些只有超级用户或者其他特权用户才能完成的任务。比如 mount、halt、su,useradd等命令,sudo权限分配是通过文件/etc/sudoers配置的。
我们每次重启系统只能通过zhengyang账号登录,如果想使用root用户登录系统,参考Ubuntu18.04中设置使用root用户登录图形界面。
3.2 网络设置
WMware网络设置支持三种模式:
- bridged(桥接模式):虚拟机能得到一个独立IP地址,网络能提供多个IP地址;虚拟机可以访问外部网络,外部网络也可以访问虚拟机
- NAT(网络地址转换模式) : 如果网络中只提供一个IP地址,虚拟机和主机使用一个IP地址;虚拟机可以外部网络,但是外部网络访问不了虚拟机
- 主机模式 (主机没有联网):相当于把主机和虚拟机通过一根网线连接在一起;
之前我们在安装ubuntu的时候选择了桥接模式。我们需要设置ubuntu和主机在同一网段内。由于我的windows操作系统的IP为192.168.0.101:
查看ubuntu的网络配置:
可以看到,本例中的网卡为“ens33”,同时可以看到相应的IP信息等。
不同的linux系统,网卡配置文件是不同的,这里ubuntu的网卡配置文件是/etc/network/interfaces:
我们首先安装vim:
sudo apt install vim
输入下面命令进行编辑网卡文件:
sudo vim /etc/network/interfaces
默认的文件内容如下:
auto lo
iface lo inet loopback
修改内容如下:下面的ens33需要改成自己的网卡名称。ip地址,掩码网关自己合理配置就行了。记得wq!保存退出:
auto ens33
iface ens33 inet static
address 192.168.0.200
netmask 255.255.255.0
gateway 192.168.0.1
配置DNS,在终端输入命令:
sudo vim /etc/resolv.conf
在其中添加192.168.1.1这个和物理机要保持一致:
nameserver 192.168.1.1
然后重启ubuntu服务器,运行ifconfig可以看到ip地址已经改为192.168.0.200:
3.3 SSH服务搭建
安装ssh-server服务,用于ssh工具远程连接:
sudo apt-get install openssh-server
查看ssh是否已经启动:
ps -ef | grep ssh
我们通过ssh工具连接ubuntu服务器,如果发现连接不上的话。在ubuntu终端下,切换到root用户:
su root
vim /etc/ssh/sshd_config
PermitRootLogin yes

保存后,重启ssh服务:
service ssh restart
再次通过ssh工具连接,我们就可以连接成功了:
3.4 FTP服务搭建
FTP是用来下载远程文件的最简单网络协议,在嵌入式开发中,由于嵌入式开发板资源有限,不能进行文件编译,因此我们都是将写好都代码在宿主机(Linux虚拟机)上进行调试编译好后生成二进制文件,然后通过ftp或NFS来进行传输到开发板上运行。也就是ARM开发板当做客户端, 使用虚拟机 Ubuntu来当做服务器。
sudo apt-get install vsftpd
修改vsftpd的配置文件/etc/vsftpd.conf:
sudo vim /etc/vsftpd.conf
将下面几行前面的#去掉:
修改完成后,执行重启命令:
sudo /etc/init.d/vsftpd restart
3.5 安装TFTP
u-boot支持通过TFTP的方式加载内核,ubuntu上运行TFTP服务器,u-boot向服务器请求其参数指定的文件,主机收到请求后将TFTP传输目录下的相应文件通过网络传输给u-boot。这需要主机具有TFTP环境。搭建过程分一下几个步骤:
安装TFTP:
sudo apt install tftp-hpa tftpd-hpa
建立TFTP传输目录
cd /work/ mkdir tftpboot chmod 0777 tftpboot
修改TFTP配置文件/etc/default/tftpd-hpa:
TFTP_USERNAME="tftp" # TFTP传输目录 TFTP_DIRECTORY="/work/tftpboot" TFTP_ADDRESS="0.0.0.0:69" # -c表示可以上传文件,-s表示指定TFTP传输目录,上面已经指定 TFTP_OPTIONS="-l -c -s"
重启TFTP服务:
service tftpd-hpa restart
为了确保环境搭建成功,可以做一些测试。在上文设置的tftp传输目录下创建文件test。然后进入某个目录,假设是/work目录,运行如下命令:
#localhost 表示本机
tftp localhost
此时进入TFTP的命令行,输入如下命令:
tftp> get test
tftp> put test
Error code 0: Permission denied
tftp> q
/work目录下出现文件test,表示TFTP服务器安装成功。
3.6 NFS服务搭建
NFS 就是 Network FileSystem 的缩写,最早之前是由sun 这家公司所发展出来的。它最大的功能就是可以透过网络,让不同的机器、不同的操作系统、可以彼此分享文件。NFS可以让你的PC通过网络将远端的NFS 服务器共享出来的文件mount到自己的系统中,在客户端看来使用NFS的远端文件就象是在使用本地文件一样。 使用NFS可以使应用程序的开发变得十分方便, 客户端不需要大容量的存储器,更不需要进行映像文件的烧录和下载,只要mount到服务器端的特定目录下,然后运行该目录下的程序即可观察到结果。嵌入式项目中常用nfs来挂载文件系统。
sudo apt-get install nfs-kernel-server portmap
它的配置文件为/etc/exports,添加共享目录:
格式 : /tmp *(rw, sync, no_root_squash)
共享文件 可访问用户 权限 写回源文件? 客户端使用root,则想要root权限
我们创建一个目录/work/nfs_root,配置/etc/exports:
/work/nfs_root *(rw,sync,no_root_squash)
修改完毕之后,启动NFS服务器
sudo /etc/init.d/nfs-kernel-server restart/start/stop
查看是否启动:
netstat -a | grep nfs
为了确保nfs环境搭建成功,不妨做一下测试。挂接nfs共享目录到/mnt/rootfs路径下,即执行如下命令,其中,-t选项用于指定文件系统的类型为nfs。
mkdir -p /mnt/rootfs mount -t nfs localhost:/work/nfs_root /mnt/rootfs
然后访问/mnt/rootfs,可见/work/nfs_root目录下的内容出现在/mnt/rootfs目录下,说明环境搭建成功。
root@zhengyang:~# ls /mnt/rootfs test
我这里在/work/nfs_root路径下创建了一个test文件。
共享目录使用结束之后,卸载共享目录,运行以下命令:
umount /mnt/rootfs
3.7 搭建samba服务器
因为我是在windows上开发,Ubuntu编译。因此windwows之间的文件共享是非常重要的。通常有两种方式:samba服务器或者共享文件夹。
Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。它可以实现windows和Unix-Like两个平台之间互相分享文档和数据。 Samba服务器的工作原理是:客户端向Samba服务器发起请求,请求访问共享目录,Samba服务器接收请求,查询smb.conf文件,查看共享目录是否存在,以及来访者的访问权限,如果来访者具有相应的权限,则允许客户端访问,最后将访问过程中系统的信息以及采集的用户访问行为信息存放在日志文件中。
安装samba:
sudo apt-get install samba
测试是否安装成功:
smb[按TAB TAB补全]
配置samba:
cd /work
mkdir sambashare
cd /etc/samba/
sudo cp smb.conf smb.cong.bkp //备份samba配置文件
sudo vi smb.conf
输入如下内容:
[share]
comment=samba
path=/work/sambashare
public=yes
create mask=0777
directory mask=0777
writable=yes
available=yes
forceuser=root
forcegroup=root
重启samba:
sudo /etc/init.d/smbd restart
windows下访问samba服务器:
步骤:网络--->\\192.168.0.200--->Enter回车键:发现出现了一个share文件夹
测试:
- 步骤1:在share文件夹下创建一个test.txt。
- 步骤2:ubuntu中 cd /worksambashare/,ls发现出现了一个test.txt
3.8 安装基本开发环境
安装build-essential软件包,build-essential作用是提供编译程序必须软件包的列表信息:
sudo apt-get install build-essential
安装bison、flex,它们分别是语法、词法分析器:
sudo apt-get install bison flex
安装C函数库的man手册,这样就可以通过类似"man read"命令查看函数的作用:
亲爱的读者和支持者们,自动博客加入了打赏功能,陆陆续续收到了各位老铁的打赏。在此,我想由衷地感谢每一位对我们博客的支持和打赏。你们的慷慨与支持,是我们前行的动力与源泉。
日期 | 姓名 | 金额 |
---|---|---|
2023-09-06 | *源 | 19 |
2023-09-11 | *朝科 | 88 |
2023-09-21 | *号 | 5 |
2023-09-16 | *真 | 60 |
2023-10-26 | *通 | 9.9 |
2023-11-04 | *慎 | 0.66 |
2023-11-24 | *恩 | 0.01 |
2023-12-30 | I*B | 1 |
2024-01-28 | *兴 | 20 |
2024-02-01 | QYing | 20 |
2024-02-11 | *督 | 6 |
2024-02-18 | 一*x | 1 |
2024-02-20 | c*l | 18.88 |
2024-01-01 | *I | 5 |
2024-04-08 | *程 | 150 |
2024-04-18 | *超 | 20 |
2024-04-26 | .*V | 30 |
2024-05-08 | D*W | 5 |
2024-05-29 | *辉 | 20 |
2024-05-30 | *雄 | 10 |
2024-06-08 | *: | 10 |
2024-06-23 | 小狮子 | 666 |
2024-06-28 | *s | 6.66 |
2024-06-29 | *炼 | 1 |
2024-06-30 | *! | 1 |
2024-07-08 | *方 | 20 |
2024-07-18 | A*1 | 6.66 |
2024-07-31 | *北 | 12 |
2024-08-13 | *基 | 1 |
2024-08-23 | n*s | 2 |
2024-09-02 | *源 | 50 |
2024-09-04 | *J | 2 |
2024-09-06 | *强 | 8.8 |
2024-09-09 | *波 | 1 |
2024-09-10 | *口 | 1 |
2024-09-10 | *波 | 1 |
2024-09-12 | *波 | 10 |
2024-09-18 | *明 | 1.68 |
2024-09-26 | B*h | 10 |
2024-09-30 | 岁 | 10 |
2024-10-02 | M*i | 1 |
2024-10-14 | *朋 | 10 |
2024-10-22 | *海 | 10 |
2024-10-23 | *南 | 10 |
2024-10-26 | *节 | 6.66 |
2024-10-27 | *o | 5 |
2024-10-28 | W*F | 6.66 |
2024-10-29 | R*n | 6.66 |
2024-11-02 | *球 | 6 |
2024-11-021 | *鑫 | 6.66 |
2024-11-25 | *沙 | 5 |
2024-11-29 | C*n | 2.88 |

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了