嵌入式linux开发环境构建


嵌入式Linux开发环境搭建-1-Linux搭建
一、硬件环境
二、安装
1、下载Ubuntu镜像文件
2、VMware下载安装
3、在VMware安装Ubuntu
3.1 新建
3.2 安装系统
3.3 VMware Tools
3.3 遇错处理
三、环境配置
1、ubuntu 16.04 desktop + server LTS - 设置 root 密码
1.1 sudo
1.1 net-tools
2、设置网络
2.1 NAT 方式上网
2.2 桥接方式上网
2.3 3、安装/配置/启动 FTP、SSH或NFS
3.1 安装并启动 FTP 服务
3.2 配置用户访问目录
3.3 准备域名和证书
3.4 访问 FTP 服务
3.5 配置SSH服务
3.6 配置NFS服务
一、硬件环境
硬件环境:
电脑
软件环境:
裸机安装Windows7_64位
VMWare版本:VMWare WorkStation 10
Ubuntu版本:Ubuntu16.04
二、安装
1、下载Ubuntu镜像文件
下载地址:http://www.ubuntu.com
打开上面的连接,我们来到如下页面,点击download:
或者镜像下载
HUAWEI CLOUD : Ubuntu
ubuntu-16.04.6-desktop-amd64.iso
2、VMware下载安装
VMware的下载安装就好办了,下载直接百度
3、在VMware安装Ubuntu
3.1 新建
3.2 安装系统
虚拟机已经配置完毕,接下来我们开启虚拟机:
然后就会来到如下界面,如果出现错误请看(四、可能遇到的错误),我们选择中文简体点击Install Ubuntu:
然后点击,开始安装:
如下,输入你的位置,随便输入就好:
然后选择汉语,点击继续:
设置用户名密码,这里博主选择自动登录
下面就开始正式安装了:
安装完成之后,会提示重启,点击现在重启
重启成功之后,会来到桌面,博主的重启中遇到一些问题,手动重启的,影响不大:
我们打开浏览器,输入百度网址,发现可以访问网络:
安装完成!!!!!!!!!!
3.3 VMware Tools
Ubuntu 16.04 虚拟机安装 VMware Tools - 既然选择了远方 便只顾风雨兼程 - CSDN博客
https://blog.csdn.net/chengyq116/article/details/83513662
3.3 遇错处理
This kernel requires an x86-64 CPU,but only detected an i686 CPU.如下图:
可能原因是:在创建虚拟机向导的时候我们如下页面选择了Ubuntu,而不是Ubuntu64,但是我下载的镜像是64位的,如下图:
解决办法:如下设置回Ubuntu64即可,然后继续你没有完成的步骤:
报如下错误:
此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态
vmware安装ubuntu " Intel VT-x 处于禁用状态"_百度经验
可能原因是:你的电脑没有支持虚拟化
解决办法:重启电脑,进入bios设置虚拟化启用。
三、环境配置 1、ubuntu 16.04 desktop + server LTS - 设置 root 密码
1.1 sudo
sudo (/ˈsuːduː/ or /ˈsuːdoʊ/) is a program for Unix-like computer operating systems that allows users to run programs with the security privileges of another user, by default the superuser. It originally stood for “superuser do” as the older versions of sudo were designed to run commands only as the superuser. However, the later versions added support for running commands not only as the superuser but also as other (restricted) users, and thus it is also commonly expanded as “substitute user do”. Although the latter case reflects its current functionality more accurately, sudo is still often called “superuser do” since it is so often used for administrative tasks.
Ubuntu 16.04 Desktop (64-bit) 安装的时候,不像其他 Linux 发行版在安装的时候就需要设置 root 密码。因为 Ubuntu 16.04 Desktop (64-bit) 是面对普通用户,无 root 密码反而更加安全,在需要 root 用户的时候,可以再设置。

              jszy@pc:~$ sudo passwd
              [sudo] jszy 的密码:
              输入新的 UNIX 密码:
              重新输入新的 UNIX 密码:
              passwd:已成功更新密码
              jszy@pc:~$
              jszy@pc:~$ su
              密码:
              root@pc:/home/jszy# exit
              exit
              jszy@pc:~$
              
终端输入 sudo passwd,然后输入当前账户密码认证。
jszy@pc:~$ sudo passwd
[sudo] jszy 的密码:
当输入当前账户密码正确时,会提示输入新的 Unix 密码。该密码就是 root 账户密码。
当输入 2 次 Unix 密码一致时,会提示你密码更新成功。
              jszy@pc:~$ sudo passwd
              [sudo] jszy 的密码:
              输入新的 UNIX 密码:
              重新输入新的 UNIX 密码:
              passwd:已成功更新密码
              
在终端输入 su,是 root 账户。然后要求你输入密码,这个不是账户密码,是刚才设置的 root 密码。
当你输入正确的 root 密码之后,前面的用户名就换成了 root,可以通过 exit 退出 root 用户,切换回刚才的用户。
              jszy@pc:~$ su
              密码:
              root@pc:/home/jszy# exit
              exit
              jszy@pc:~$
              
1.1 net-tools
我们在虚拟主机中查看ip地址需要输入ifconfig,但是报以下错误:
root@pc:/home/jszy# ipconfig
未找到 'ipconfig' 命令,您要输入的是否是:
命令 'iwconfig' 来自于包 'wireless-tools' (main)
命令 'iconfig' 来自于包 'ipmiutil' (universe)
命令 'ifconfig' 来自于包 'net-tools' (main)
ipconfig:未找到命令
系统提示我们安装 net-tools,当我们输入以下命令,即可安装完成。
              sudo apt-get install net-tools

              root@pc:/home/jszy# sudo apt-get install net-tools
              正在读取软件包列表... 完成
              正在分析软件包的依赖关系树
              正在读取状态信息... 完成
              net-tools 已经是最新版 (1.60-26ubuntu1)。
              升级了 0 个软件包,新安装了 0 个软件包,要卸载 0 个软件包,有 39 个软件包未被升级。
              root@pc:/home/jszy#
              
然后再输入命令ifconfig即可看到虚拟机的ip地址
2、设置网络
虚拟机如果要从网上获取资源,就要能够访问外网。虚拟机有三种上网方式:桥接上网,NAT上网,单主机模式【没用过】。 本节从原理和操作2个方面讲了NAT方式和桥接方式这2种不同的虚拟机上网模式。
在嵌入式开发中,如果虚拟机要实现上网,建议使用NAT方式访问外网[最简单]。桥接方式一般用来和开发板通信。
注意:主机一定要能上网。
2.1 NAT 方式上网
在NAT模式下,虚拟系统需要借助NAT(网络地址转换)功能,通过宿主机器所在的网络来访问公网。也就是说,使用NAT模式虚拟系统可把物理主机作为路由器访问互联网。 (虚拟机在主机的下一级)
NAT网络环境下需要做到:
(1)主机需要开启vmdhcp和vmnat服务。(服务的开启,在我的电脑当中右键“管理”可以设置)
(2)NAT模式下的虚拟机的TCP/IP配置信息将由VMnet8(NAT)虚拟网络的DHCP服务器自动分配,需要开启DHCP功能。
2.2 桥接方式上网 在桥接模式下,VMWare虚拟出来的操作系统就像是局域网中的一台独立的主机(主机和虚拟机处于对等地位,直接与外网通信),它可以访问该类网段内任何一台机器。 桥接网络环境下需要做到:
(1)手动为虚拟机系统配置IP地址、子网掩码。
(2)在桥接的模式下虚拟机必须与物理机处于同一网段,(举个例子,物理机IP:192.168.1.2,虚拟机IP:192.168.1.3)这样虚拟系统才能和真实主机进行通信。
2.3
关键点:桥接到有限网卡;使得开发板,window主机,ubuntu在同一局域网中。
也就是设置PC机、虚拟机、以及开发板的IP在同一个网段【同一局域网】,即192.168.1.*,其他掩码、网关、DNS都设置一样。
3、安装/配置/启动 FTP、SSH或NFS
3.1 安装并启动 FTP 服务
安装 VSFTPD
使用 apt-get 安装 vsftpd:
              sudo apt-get install vsftpd -y
              vsftpd --version //检测是否安装

              root@pc:/home/uftp# vsftpd -version
              vsftpd: version 3.0.3
              
vsftpd 是在 Linux 上被广泛使用的 FTP 服务器,根据其官网介绍,它可能是 UNIX-like 系统下最安全和快速的 FTP 服务器软件。

root@pc:/home/jszy# sudo apt-get install vsftpd -y 正在读取软件包列表... 完成 正在分析软件包的依赖关系树 正在读取状态信息... 完成 下列【新】软件包将被安装: vsftpd 升级了 0 个软件包,新安装了 1 个软件包,要卸载 0 个软件包,有 39 个软件包未被升级。 需要下载 115 kB 的归档。 解压缩后会消耗 336 kB 的额外空间。 获取:1 http://cn.archive.ubuntu.com/ubuntu xenial/main amd64 vsftpd amd64 3.0.3-3ubuntu2 [115 kB] 已下载 115 kB,耗时 1秒 (65.3 kB/s) 正在预设定软件包 ... 正在选中未选择的软件包 vsftpd。 (正在读取数据库 ... 系统当前共安装有 179569 个文件和目录。) 正准备解包 .../vsftpd_3.0.3-3ubuntu2_amd64.deb ... 正在解包 vsftpd (3.0.3-3ubuntu2) ... 正在处理用于 systemd (229-4ubuntu21.16) 的触发器 ... 正在处理用于 ureadahead (0.100.0-19) 的触发器 ... 正在处理用于 man-db (2.7.5-1) 的触发器 ... 正在设置 vsftpd (3.0.3-3ubuntu2) ... 正在处理用于 systemd (229-4ubuntu21.16) 的触发器 ... 正在处理用于 ureadahead (0.100.0-19) 的触发器 ... root@pc:/home/jszy#

启动 VSFTPD
安装完成后 VSFTPD 会自动启动,通过 netstat 命令可以看到系统已经[监听了 21 端口]:
              sudo netstat -nltp | grep 21
              
              root@pc:/home/jszy# sudo netstat -nltp | grep 21
              tcp6 0 0 :::21 :::* LISTEN 5181/vsftpd
              root@pc:/home/jszy#
              
如果没有启动,可以手动开启 VSFTPD 服务:
sudo systemctl start vsftpd.service
FTP 协议默认使用 21 端口作为服务端口
3.2 配置用户访问目录
新建用户主目录
sudo mkdir /home/uftp
执行完后,在这里 /home/uftp 就能看到新建的文件夹 uftp 了。
创建登录欢迎文件:
sudo touch /home/uftp/welcome.txt
方便用户登录后可以看到欢迎信息,并且确定用户确实登录到了主目录上。
用户的主目录是用户通过 FTP 登录后看到的根目录
新建用户 uftp 并设置密码
创建一个用户 uftp [?]:
sudo useradd -d /home/uftp -s /bin/bash uftp
为用户 uftp 设置密码 [?]:
sudo passwd uftp
删除掉 pam.d 中 vsftpd,因为该配置文件会导致使用用户名登录 ftp 失败:
sudo rm /etc/pam.d/vsftpd
为了方便后面的实验步骤,不建议使用其它的用户名
请记住设置的密码以用于后续步骤
限制该用户仅能通过 FTP 访问
限制用户 uftp 只能通过 FTP 访问服务器,而不能直接登录服务器:
sudo usermod -s /sbin/nologin uftp
修改 vsftpd 配置
              sudo chmod a+w /etc/vsftpd.conf
    
              修改 /etc/vsftpd.conf 文件中的配置(直接将如下配置添加到配置文件最下方):

              # 限制用户对主目录以外目录访问
              chroot_local_user=YES

              # 指定一个 userlist 存放允许访问 ftp 的用户列表
              userlist_deny=NO
              userlist_enable=YES

              # 记录允许访问 ftp 用户列表
              userlist_file=/etc/vsftpd.user_list

              # 不配置可能导致莫名的530问题
              seccomp_sandbox=NO

              # 允许文件上传
              write_enable=YES

              # 使用utf8编码
              utf8_filesystem=YES
              
新建文件 /etc/vsftpd.user_list,用于存放允许访问 ftp 的用户:
              sudo touch /etc/vsftpd.user_list
              sudo chmod a+w /etc/vsftpd.user_list
              
修改 /etc/vsftpd.user_list ,加入刚刚创建的用户:
示例代码:/etc/vsftpd.user_list
uftp
设置访问权限
设置主目录访问权限(只读):
sudo chmod a-w /home/uftp
新建公共目录,并设置权限(读写):
sudo mkdir /home/uftp/public && sudo chmod 777 -R /home/uftp/public
重启vsftpd 服务:
sudo systemctl restart vsftpd.service
3.3 准备域名和证书
注:如果您不需要通过域名访问 FTP 服务器则可以直接点击“已完成,下一步”跳过域名和证书的准备环节
3.4 访问 FTP 服务
FTP 服务已安装并配置完成,下面我们来使用该 FTP 服务
访问 FTP 服务
根据您个人的工作环境,选择一种方式来访问已经搭建的 FTP 服务
通过 FTP 客户端工具访问
FTP 客户端工具众多,下面推荐两个常用的:
FileZilla - 跨平台的 FTP 客户端,支持 Windows 和 Mac
WinSCP - Windows 下的 FTP 和 SFTP 连接客户端
下载和安装 FTP 客户端后,使用下面的凭据进行连接即可:
[主机]:
<您的 CVM IP 地址>
用户:
uftp
输入密码后,如果能够正常连接,那么大功告成,您可以开始使用属于您自己的 FTP 服务器了!
接下来,请上传任意一张图片到您的 FTP 服务器上的 uftp 的 public 目录下,然后,就可以在 /home/uftp/public 中看到了。
通过 Windows 资源管理器访问
Windows 用户可以复制下面的[链接]到资源管理器的地址栏访问:
ftp://uftp:你的密码@<您的 CVM IP 地址> ftp://uftp:******@192.168.193.129
如果您申请了域名,可以将Ip 地址替换为对应的域名作为访问凭据
如果您申请了域名,可以将链接中的 Ip 地址替换为对应的域名访问 FTP 服务
大功告成
恭喜!您已经成功完成了搭建 FTP 服务器的实验任务。
3.5 配置SSH服务
安装SSH
sudo apt-get install openssh-server
打开"终端窗口",输入"sudo apt-get install openssh-server"–>回车–>输入"y"–>回车–>安装完成。
              root@pc:/home/uftp# sudo apt-get install openssh-server
              正在读取软件包列表... 完成
              正在分析软件包的依赖关系树
              正在读取状态信息... 完成
              将会同时安装下列软件:
              ncurses-term openssh-client openssh-sftp-server ssh-import-id
              建议安装:
              ssh-askpass libpam-ssh keychain monkeysphere rssh molly-guard
              下列【新】软件包将被安装:
              ncurses-term openssh-server openssh-sftp-server ssh-import-id
              下列软件包将被升级:
              openssh-client
              升级了 1 个软件包,新安装了 4 个软件包,要卸载 0 个软件包,有 38 个软件包未被升级。
              需要下载 633 kB/1,223 kB 的归档。
              解压缩后会消耗 5,140 kB 的额外空间。
              您希望继续执行吗? [Y/n] y

              获取:1 http://cn.archive.ubuntu.com/ubuntu xenial/main amd64 ncurses-term all 6.0+20160213-1ubuntu1 [249
              kB]
              获取:2 http://cn.archive.ubuntu.com/ubuntu xenial-updates/main amd64 openssh-sftp-server amd64
              1:7.2p2-4ubuntu2.8 [38.9 kB]
              获取:3 http://cn.archive.ubuntu.com/ubuntu xenial-updates/main amd64 openssh-server amd64
              1:7.2p2-4ubuntu2.8 [335 kB]
              获取:4 http://cn.archive.ubuntu.com/ubuntu xenial/main amd64 ssh-import-id all 5.5-0ubuntu1 [10.2 kB]
              已下载 633 kB,耗时 5秒 (117 kB/s)
              正在预设定软件包 ...
              (正在读取数据库 ... 系统当前共安装有 179626 个文件和目录。)
              正准备解包 .../openssh-client_1%3a7.2p2-4ubuntu2.8_amd64.deb ...
              正在将 openssh-client (1:7.2p2-4ubuntu2.8) 解包到 (1:7.2p2-4ubuntu2.7) 上 ...
              正在选中未选择的软件包 ncurses-term。
              正准备解包 .../ncurses-term_6.0+20160213-1ubuntu1_all.deb ...
              正在解包 ncurses-term (6.0+20160213-1ubuntu1) ...
              正在选中未选择的软件包 openssh-sftp-server。
              正准备解包 .../openssh-sftp-server_1%3a7.2p2-4ubuntu2.8_amd64.deb ...
              正在解包 openssh-sftp-server (1:7.2p2-4ubuntu2.8) ...
              正在选中未选择的软件包 openssh-server。
              正准备解包 .../openssh-server_1%3a7.2p2-4ubuntu2.8_amd64.deb ...
              正在解包 openssh-server (1:7.2p2-4ubuntu2.8) ...
              正在选中未选择的软件包 ssh-import-id。
              正准备解包 .../ssh-import-id_5.5-0ubuntu1_all.deb ...
              正在解包 ssh-import-id (5.5-0ubuntu1) ...
              正在处理用于 man-db (2.7.5-1) 的触发器 ...
              正在处理用于 systemd (229-4ubuntu21.16) 的触发器 ...
              正在处理用于 ureadahead (0.100.0-19) 的触发器 ...
              正在处理用于 ufw (0.35-0ubuntu2) 的触发器 ...
              正在设置 openssh-client (1:7.2p2-4ubuntu2.8) ...
              正在设置 ncurses-term (6.0+20160213-1ubuntu1) ...
              正在设置 openssh-sftp-server (1:7.2p2-4ubuntu2.8) ...
              正在设置 openssh-server (1:7.2p2-4ubuntu2.8) ...
              Creating SSH2 RSA key; this may take some time ...
              2048 SHA256:Qjc5swynmyBfYsjciS0+19V1WyQz6RP+B46LRy0qvM4 root@pc (RSA)
              Creating SSH2 DSA key; this may take some time ...
              1024 SHA256:fUJK6XtrQittLicGUobgeXCHPVA/cOkIYc/ziaX2R9Y root@pc (DSA)
              Creating SSH2 ECDSA key; this may take some time ...
              256 SHA256:zWOIESJ/1rzc6b1DZcgRaErp3KfmJdB8W8TWkUcD/ko root@pc (ECDSA)
              Creating SSH2 ED25519 key; this may take some time ...
              256 SHA256:YZM71S2sK3R0ctuxe0yXtzszhrGzMMQVZ9ABhkFZGvg root@pc (ED25519)
              正在设置 ssh-import-id (5.5-0ubuntu1) ...
              正在处理用于 systemd (229-4ubuntu21.16) 的触发器 ...
              正在处理用于 ureadahead (0.100.0-19) 的触发器 ...
              正在处理用于 ufw (0.35-0ubuntu2) 的触发器 ...
              
查看ssh服务是否启动
打开"终端窗口",输入"sudo ps -e |grep ssh"–>回车–>有sshd,说明ssh服务已经启动
如果没有启动,输入sudo service ssh start或sudo /etc/init.d/ssh restart–>回车–>ssh服务就会启动。
修改配置文件
使用gedit修改配置文件"/etc/ssh/sshd_config"
打开"终端窗口",输入"sudo gedit /etc/ssh/sshd_config"–>回车–>把配置文件中的"PermitRootLogin
prohibit-password“加一个”#“号,把它注释掉–>再增加一句”PermitRootLogin yes"–>保存,修改成功。
#PermitRootLogin prohibit-password
PermitRootLogin yes
一般仅修改PermitRootLogin值为no,禁止root登录,其他保持默认即可。
              Port 22
              “Port”设置sshd监听的端口号。

              ListenAddress 192.168.1.1
              “ListenAddress”设置sshd服务器绑定的IP地址。

              HostKey /etc/ssh/ssh_host_key
              “HostKey”设置包含计算机私人密匙的文件。

              KeyRegenerationInterval 3600
              “KeyRegenerationInterval”设置在多少秒之后自动重新生成服务器的密匙(如果使用密匙)。重新生成密匙是为了防止用盗用的密匙解密被截获的信息。

              ServerKeyBits 768
              “ServerKeyBits”定义服务器密匙的位数。

              SyslogFacility AUTH
              “SyslogFacility”设置在记录来自sshd的消息的时候,是否给出“facility code”。

              LogLevel INFO
              “LogLevel”设置记录sshd日志消息的层次。INFO是一个好的选择。查看sshd的man帮助页,已获取更多的信息。

              LoginGraceTime 120
              “LoginGraceTime”设置如果用户不能成功登录,在切断连接之前服务器需要等待的时间(以秒为单位)。

              PermitRootLogin no
              “PermitRootLogin”设置root能不能用ssh登录。这个选项一定不要设成“yes”。

              StrictModes yes
              “StrictModes”设置ssh在接收登录请求之前是否检查用户家目录和rhosts文件的权限和所有权。这通常是必要的,因为新手经常会把自己的目录和文件设成任何人都有写权限。

              ClientAliveInterval 300(默认为0)
              这个参数的是意思是每5分钟,服务器向客户端发一个消息,用于保持连接

              IgnoreRhosts yes
              “IgnoreRhosts”设置验证的时候是否使用“rhosts”和“shosts”文件。

              IgnoreUserKnownHosts yes
              “IgnoreUserKnownHosts”设置ssh daemon是否在进行RhostsRSAAuthentication安全验证的时候忽略用户的“$HOME/.ssh/known_hosts”

              X11Forwarding no
              “X11Forwarding”设置是否允许X11转发。

              PrintMotd yes
              “PrintMotd”设置sshd是否在用户登录的时候显示“/etc/motd”中的信息。

              RhostsAuthentication no
              “RhostsAuthentication”设置只用rhosts或“/etc/hosts.equiv”进行安全验证是否已经足够了。

              RhostsRSAAuthentication no
              “RhostsRSA”设置是否允许用rhosts或“/etc/hosts.equiv”加上RSA进行安全验证。

              RSAAuthentication yes
              “RSAAuthentication”设置是否允许只有RSA安全验证。

              PasswordAuthentication yes
              “PasswordAuthentication”设置是否允许口令验证。

              PermitEmptyPasswords no
              “PermitEmptyPasswords”设置是否允许用口令为空的帐号登录。

              AllowUsers admin
              “AllowUsers”的后面可以跟着任意的数量的用户名的匹配串(patterns)或user@host这样的匹配串,这些字符串用空格隔开。主机名可以是DNS名或IP地址。
              
3.6 配置NFS服务
NFS 是Network File
System的缩写,即网络文件系统。一种使用于分散式文件系统的协定,由Sun公司开发,于1984年向外公布。
功能是通过网络让不同的机器、不同的操作系统能够彼此分享个别的数据,让应用程序在客户端通过网络访问位于服务器磁盘中的数据,是在类Unix系统间实现磁盘文件共享的一种方法。
NFS 的基本原则是“容许不同的客户端及服务端通过一组RPC分享相同的文件系统”,它是独立于操作系统,容许不同硬件及操作系统的系统共同进行文件的分享。
NFS在文件传送或信息传送过程中依赖于RPC协议。RPC,远程过程调用 (Remote Procedure Call) 是能使客户端执行其他系统中程序的一种机制。NFS本身是没有提供信息传输的协议和功能的,但NFS却能让我们通过网络进行资料的分享,这是因为NFS使用了一些其它的传输协议。 而这些传输协议用到这个RPC功能的。可以说NFS本身就是使用RPC的一个程序。或者说NFS也是一个RPC SERVER。
所以只要用到NFS的地方都要启动RPC服务,不论是NFS SERVER或者NFS CLIENT。这样SERVER和CLIENT才能通过RPC来实现PROGRAM PORT的对应。
可以这么理解RPC和NFS的关系:NFS是一个文件系统,而RPC是负责负责信息的传输。
NFS的安装
              apt-get install nfs-kernel-server

              sudo apt-get install nfs-kernel-server portmap

              root@pc:/home/uftp# sudo apt-get install nfs-kernel-server portmap
              正在读取软件包列表... 完成
              正在分析软件包的依赖关系树
              正在读取状态信息... 完成
              注意,选中 'rpcbind' 而非 'portmap'
              将会同时安装下列软件:
              keyutils libnfsidmap2 libtirpc1 nfs-common
              建议安装:
              open-iscsi watchdog
              下列【新】软件包将被安装:
              keyutils libnfsidmap2 libtirpc1 nfs-common nfs-kernel-server rpcbind
              升级了 0 个软件包,新安装了 6 个软件包,要卸载 0 个软件包,有 38 个软件包未被升级。
              需要下载 467 kB 的归档。
              解压缩后会消耗 1,845 kB 的额外空间。
              您希望继续执行吗? [Y/n] y
              获取:1 http://cn.archive.ubuntu.com/ubuntu xenial/main amd64 libnfsidmap2 amd64 0.25-5 [32.2 kB]
              获取:2 http://cn.archive.ubuntu.com/ubuntu xenial/main amd64 keyutils amd64 1.5.9-8ubuntu1 [47.1 kB]
              获取:3 http://cn.archive.ubuntu.com/ubuntu xenial-updates/main amd64 libtirpc1 amd64 0.2.5-1ubuntu0.1
              [75.4 kB]
              获取:4 http://cn.archive.ubuntu.com/ubuntu xenial/main amd64 rpcbind amd64 0.2.3-0.2 [40.3 kB]
              获取:5 http://cn.archive.ubuntu.com/ubuntu xenial-updates/main amd64 nfs-common amd64
              1:1.2.8-9ubuntu12.1 [184 kB]
              获取:6 http://cn.archive.ubuntu.com/ubuntu xenial-updates/main amd64 nfs-kernel-server amd64
              1:1.2.8-9ubuntu12.1 [88.0 kB]
              已下载 467 kB,耗时 5秒 (79.2 kB/s)
              正在选中未选择的软件包 libnfsidmap2:amd64。
              (正在读取数据库 ... 系统当前共安装有 182384 个文件和目录。)
              正准备解包 .../libnfsidmap2_0.25-5_amd64.deb ...
              正在解包 libnfsidmap2:amd64 (0.25-5) ...
              正在选中未选择的软件包 keyutils。
              正准备解包 .../keyutils_1.5.9-8ubuntu1_amd64.deb ...
              正在解包 keyutils (1.5.9-8ubuntu1) ...
              正在选中未选择的软件包 libtirpc1:amd64。
              正准备解包 .../libtirpc1_0.2.5-1ubuntu0.1_amd64.deb ...
              正在解包 libtirpc1:amd64 (0.2.5-1ubuntu0.1) ...
              正在选中未选择的软件包 rpcbind。
              正准备解包 .../rpcbind_0.2.3-0.2_amd64.deb ...
              正在解包 rpcbind (0.2.3-0.2) ...
              正在选中未选择的软件包 nfs-common。
              正准备解包 .../nfs-common_1%3a1.2.8-9ubuntu12.1_amd64.deb ...
              正在解包 nfs-common (1:1.2.8-9ubuntu12.1) ...
              正在选中未选择的软件包 nfs-kernel-server。
              正准备解包 .../nfs-kernel-server_1%3a1.2.8-9ubuntu12.1_amd64.deb ...
              正在解包 nfs-kernel-server (1:1.2.8-9ubuntu12.1) ...
              正在处理用于 man-db (2.7.5-1) 的触发器 ...
              正在处理用于 libc-bin (2.23-0ubuntu11) 的触发器 ...
              正在处理用于 systemd (229-4ubuntu21.16) 的触发器 ...
              正在处理用于 ureadahead (0.100.0-19) 的触发器 ...
              正在设置 libnfsidmap2:amd64 (0.25-5) ...
              正在设置 keyutils (1.5.9-8ubuntu1) ...
              正在设置 libtirpc1:amd64 (0.2.5-1ubuntu0.1) ...
              正在设置 rpcbind (0.2.3-0.2) ...
              正在设置 nfs-common (1:1.2.8-9ubuntu12.1) ...

              Creating config file /etc/idmapd.conf with new version

              Creating config file /etc/default/nfs-common with new version
              正在添加系统用户"statd" (UID 123)...
              正在将新用户"statd" (UID 123)添加到组"nogroup"...
              无法创建主目录"/var/lib/nfs"
              nfs-utils.service is a disabled or a static unit, not starting it.
              正在设置 nfs-kernel-server (1:1.2.8-9ubuntu12.1) ...

              Creating config file /etc/exports with new version

              Creating config file /etc/default/nfs-kernel-server with new version
              正在处理用于 libc-bin (2.23-0ubuntu11) 的触发器 ...
              正在处理用于 systemd (229-4ubuntu21.16) 的触发器 ...
              正在处理用于 ureadahead (0.100.0-19) 的触发器 ...
              root@pc:/home/uftp#
              
查看nfs的端口是否打开
netstat -tl
再重启一下nfs服务
/etc/init.d/nfs-kernel-server restart
创建nfs共享目录 /home/nfsdoc ,在里面新建一个文件a.c来共享
修改nfs配置文件/etc/exports
在Ubuntu Linux系统中,/etc/exports是nfs服务器的全局配置文件。配置文件中一行即为一条配置项,用于指明网络中“哪些客户端”共享“哪些目录资源”。
将创建的共享目录添加到其中,后面加上*(rw,sync,no_root_squash,no_subtree_check)参数 将该共享目录挂在到本地的/mnt/share下可以通过mount命令在客户机端挂载nfs服务器端的共享资源。mount命令的一般语法格式是:
mount nfssrvname:/Share-Directory /mnt-Point nfssrvname表示nfs服务器主机名,也可用IP地址; Share-Directory表示nfs服务器导出的共享资源目录,必须用 绝对路径,与nfssrvname用”:”号隔开; mnt-Point表示共享资源将挂载到客户端主机上的位置,在挂载前一定要确保挂载目录已经存在。
查看nfs服务器的共享资源 在客户机连接nfs共享资源前,通常要用showmount命令查看一下nfs服务器上的共享资源情况,了解是否有权限访问。showmount命令查看 某台nfs服务器上都有哪些nfs共享资源。showmount命令包含在nfs-kernel-server软件包中,一般语法格式 是:
showmount [dehv] nfssrvname
其中nfssrvname表示nfs服务器主机名,也可用IP地址各选项如下:
-d :显示客户端所挂载的共享目录
-e: 显示nfs服务的导出共享目录列表
-h: 显示帮助信息
-v: 显示版本
查看挂载后的目录的内容,是否有nfs服务器上新建的a.c文件
卸载共享资源
在使用完nfs服务器共享资源后,建议即刻卸载nfs文件系统。卸载命令umount一般语法格式是:
umount /mnt-Point
其中mnt-Point表示共享资源在客户端的挂载点。
注意: 当有用户在使用某个已加装的共享目录上的文件时(在挂载点下要退出才能卸载),则不能卸载在文件系统。
如果用户确认无误,可使用"umount -f"命令强行卸载共享的目录。
————————————————
版权声明:本文为CSDN博主「jszy1314」的编辑整理,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/jszy1314/article/details/88806911

对于初学者,只需要一台安装有linux操作系统(比如Ubuntu)的PC即可,或者在windows下安装一个虚拟机软件(Vmware),虚拟一个Linux系统的主机,但是我建议还是安装真机,这样会迫使你必须在Linux环境下做任何事情,能让你更快的熟悉Linux操作系统。 那么当我们进入进阶阶段的学习时,需要在硬件设备上跑程序的时候,那我们就需要继续搭建交叉开发环境了。交叉开发模式即编译和运行不在同一台主机上,在PC机上编辑、编译,在目标机(开发板或者产品)上运行程序。 如何搭建嵌入式linux开发环境? 在主机上开发完程序,通常使用nfs网络挂载或者tftp将目标代码通过网线下载到目标板进行验证,但是,像我们当前项目的驱动开发,驱动都是集成在内核中的,所以每次都是在Ubuntu上将整个内核代码进行编译,然后通过usb将整个内核镜像产物进行烧写。 gcc(GNU C Compiler),大名鼎鼎的GNU的C/C++/Obj-C编译器 gcc一般Linux系统自带,不用自己安装,下面简单说下gcc编译的过程,GCC的编译流程分为四个步骤: 预处理(Pre-Processing):gcc -E hello.c -o hello.i 编译(Compiling):gcc -E hello.c -o hello.i 汇编(Assembling):gcc -c hello.s -o hello.o 链接(Linking):gcc hello.o -o hello 链接时有时候会加如下参数: -I: 指定头文件的路径 -L: 指定库的路径 安装交叉编译工具链 当我们初学的时候仅仅在Linux主机下编译运行我们的程序,gcc就够了,但是如果交叉运行时,就必须安装交叉编译工具链,交叉编译工具链可以自己制作,但是我还是建议大家通过以下方式安装: 在~目录下创建一个文件夹 如何搭建嵌入式linux开发环境? 下载交叉编译工具链gcc-4.6.4.tar.xz(根据你需要的版本下载)cp到toolchain目录下进行解压 如何搭建嵌入式linux开发环境? 添加环境变量 修改配置文件/etc/bash.bashrc,在最后一行添加: export PATH=$PATH:/home/linux/toolchain/gcc-4.6.4/bin/ 重启配置文件 source /etc/bash.bashrc 工具链测试 arm-none-linux-gnueabi-gcc -v、 如果可以看到版本号,说明安装配置成功。 tftp服务器的安装及配置 tftp是用来下载远程文件的最简单网络协议,基于UDP来实现的,嵌入式linux的tftp开发环境包括两个方面: 一是linux服务器端的tftp-server支持,二是嵌入式目标系统的tftp-client支持。因为u-boot(bootloader的一种)本身内置支持tftp-client,所以嵌入式目标系统端就不用配置了。 修改文件(/etc/default/tftpd-hapa),开启tftp服务 sudo vi /etc/default/tftpd-hpa 改为: 如何搭建嵌入式linux开发环境? -l:以standalone/listen 模式启动TFTP服务,而不是从inetd启动 ,standalone/listen模式是一次启动,运行期间一直驻留在内存中,优点是反应快,缺点是损耗了一定的系统资源,通常用于对实时性要求较高的地方,inetd启动方式相反,只在外部发出连接请求时才调用tftp进程,不占用系统资源。 -c:可创建新文件,默认情况下,TFTP只允许覆盖原有文件,不能创建新文件。 -s:改变TFTP启动的根目录,加了-s之后,客户端端在使用TFTP时,不再需要输入指定的目录。 重启tftp服务器 sudo service tftpd-hpa restart 创建/tftpboot目录(在根目录下创建),并修改权限 sudo mkdir tftpbootsudo chmod 777 tftpboot 登录本机进行测试 tftp localhost //登录tftp > get xxx //xxx为你想要从服务器(/tftpboot目录)下载的文件tftp > put xxx //xxx为你想要往服务器(/tftpboot目录)发送的文件tftp > q //q表示退出 如果采用烧写整个Linux kernel镜像的方法,通常使用usb将主机和目标板连接,然后根据不同的芯片厂商提供的烧写工具进行烧写,比如高通芯片使用Qfile工具进行烧写。

相关阅读:
linux基础
linux怎么学
linux和GNU
GNU Free Documentation License
最受欢迎的linux发行版
initroot编辑整理,转载请注明www.initroot.com

100次点赞 100次阅读