uboot 启动,samba服务配置,tftp启动内核,NFS挂载根文件系统,制作根文件系统

文章目录

  • 一、U-Boot
    • 1.1 开机进入U-Boot命令行
    • 1.2.打印当前环境变量
  • 二、samba服务配置
  • 三、tftp服务器配置
  • 四、NFS服务器配置
    • 4.3.查看 NFS 服务项 rpc 服务器注册的端口列表
    • 4.4.启动 NFS 服务后 rpc 服务已经启用了对 NFS 的端口映射列表
  • 五、制作根文件系统
    • 5.1.文件系统
    • 5.2.创建文件系统
    • 5.2.文件系统
  • 六、 菜鸟学习嵌入式 问题笔记之 关于-/bin/sh: 命令:not found的解决办法(busybox)

一、U-Boot

Das U-Boot 是一个主要用于嵌入式系统的引导加载程序,可以支持多种不同的计算机系统结构,包括PPC、ARM、AVR32、MIPS、x86、68k、Nios与MicroBlaze。这也是一套在GNU通用公共许可证之下发布的自由软件。
Das U-Boot可以在x86计算机上建构,但这部x86计算机必须安装有可支持特定平台结构的交互发展GNU工具链,例如crosstool、Embedded Linux Development Kit (ELDK)或OSELAS.Toolchain。

1.1 开机进入U-Boot命令行

首先将U-Boot烧进板子中作为bootloader,在开机启动出现下面的界面的时候迅速按下任意键即可进入U-Boot命令行,按下q进入U-Boot shell
uboot 启动,samba服务配置,tftp启动内核,NFS挂载根文件系统,制作根文件系统_第1张图片

1.2.打印当前环境变量

  • printenv
Image Name:   Linux-2.6.32.2-FriendlyARM
Created:      Sat Nov 23 08:37:52 2019
Image Type:   ARM Linux Kernel Image (uncompressed)
Data Size:    2352856 Bytes = 2297.71 kB = 2.24 MB
Load Address: 0x30008000
Entry Point:  0x30008040
  • 设置启动参数(NFS挂载根文件系统)
  1. rootfs_qtopia_qt4 nfs-rootfs 作为根文件系统

setenv bootargs 'root=/dev/nfs rw nfsroot=192.168.0.104::/opt/FriendlyARM/mini2440/rootfs_qtopia_qt4 nfs-rootfs ip=192.168.0.230:192.168.0.104:192.168.0.1:255.255.255.0:bogon:eth0:off console=ttySAC0,115200'

  1. rootfs作为根文件系统

setenv bootargs 'root=/dev/nfs rw nfsroot=192.168.0.104::/opt/FriendlyARM/mini2440/rootfs ip=192.168.0.230:192.168.0.104:192.168.0.1:255.255.255.0:bogon:eth0:off console=ttySAC0,115200'

  1. 格式说明

转载:https://blog.csdn.net/qq_24835087/article/details/84578111
nfsroot=服务器ip:/共享文件夹
ip=开发板ip:linux服务器ip:网关ip:子网掩码:主机名:网卡:off
root 表示使用/dev/nfs这个设备作为根文件系统。
rw 表示可读可写的。
nfsroot 表示服务器中rootfs所在路径,注意需要跟上服务器的ip地址。
192.168.0.230 是板子启动之后的ip地址。
192.168.0.104 是nfs服务器的ip地址。
192.168.0.1 是板子网关地址。
255.255.255.0 是板子子网掩码。 eth0 表示板子上的网络设备。 off 表示关闭动态获取ip地址
注意:eh0前面有两个冒号,那是因为这里还可以填写一个板子的主机名,这里没有设置,所以为空。

  • tftp启动内核
    //从服务器中得到内核映像,并运行
    setenv bootcmd ‘tftp 0x30008000 uImage;bootm 0x30008040’
    //保存更改
    saveenv

二、samba服务配置

Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。通过设置“NetBIOS over TCP/IP”使得Samba不但能与局域网络主机分享资源,还能与全世界的电脑分享资源。

转载:https://www.cnblogs.com/xiyushimei/p/8623252.html

使用的vmware12虚拟机安装的centos6.8和物理机上的windows10,实现在windows10 上访问CentOs上的samba服务。

一、先查看系统中是否安装有samba服务相关的软件包。

  uboot 启动,samba服务配置,tftp启动内核,NFS挂载根文件系统,制作根文件系统_第2张图片

查看到我的linux中没有安装samba相关的软件包,接下来进行安装几个相关的软件包:

samba-3.6.9-151.el6.x86_64                            //服务器端软件,主要提供samba服务器的守护程序,共享文档,日志的轮替

samba-common-3.6.9-151.el6.x86_64               //主要提供samba服务器的设置文件与设置文件语法检验程序testparm

samba-client-3.6.9-151.el6.x86_64                    //客户端软件,主要提供linux主机作为客户端时,所需要的工具指令集

二、使用yum进行包的安装(这样可以解决包之间的依赖关系),当然也可以使用rpm的方式单个进行安装

uboot 启动,samba服务配置,tftp启动内核,NFS挂载根文件系统,制作根文件系统_第3张图片

查看已经安装成功(多出来的几个是因为依赖关系安装上的)

uboot 启动,samba服务配置,tftp启动内核,NFS挂载根文件系统,制作根文件系统_第4张图片

安装成功之后,系统会生成服务的配置文件和一些命令工具

/etc/samba/smb.conf   //是samba服务的主配置文件

/etc/init.d/smb             //是samba的启动/关闭文件

三、查看服务的启动情况,设置服务开机自动启动。

# service smb status

uboot 启动,samba服务配置,tftp启动内核,NFS挂载根文件系统,制作根文件系统_第5张图片

# service smb start

设置开机自动启动

# chkconfig  --level 35 smb on

四、修改smb服务配置文件。

[global]                    //设置samba服务整体环境

workgroup = WORKGROUP            //设置工作组名称
server string = Samba Server Version %v                 //服务器说明

[laiGei]                     //共享目录的名称


comment = Public stuff               //注释说明 
path = /usr/local/laige                 //共享目录的路径
public = yes                   //是yes/否no公开共享,若为否则进行身份验证(只有当security = share 时此项才起作用)
writeable = yes                //是yes/否no不以只读方式共享当与read only发生冲突时,无视read only
browseable = yes                 //是yes/否no在浏览资源中显示共享目录,若为否则必须指定共享路径才能存取
guest ok = yes                //是yes/否no公开共享,若为否则进行身份验证(只有当security = share 时此项才起作用)

 uboot 启动,samba服务配置,tftp启动内核,NFS挂载根文件系统,制作根文件系统_第6张图片

共享的目录的路径是/usr/local/laige, 对外的名称是laiGe

配置文件修改完成之后,重启一下服务

# service smb restart

五、添加一个共享用户,用来访问共享文件。

先添加一个普通用户 (因为要添加的共享用户必须是系统用户)

# useradd  laige       //因为不需要在shell中登录,所以可以不设置密码

然后使用smbpasswd添加共享用户并设置密码

# smbpasswd -a laige

uboot 启动,samba服务配置,tftp启动内核,NFS挂载根文件系统,制作根文件系统_第7张图片

六、使用windows来访问linux中的samba服务器(网络互通的情况下)。

先查看一下linux的ip

# ifconfig eth0

uboot 启动,samba服务配置,tftp启动内核,NFS挂载根文件系统,制作根文件系统_第8张图片

ip是192.168.1.194

然后关闭防火墙

# service iptables stop

 最后在windows中打开文件资源管理器输入\\192.168.1.194进行访问

输入共享用户名和密码进行访问

uboot 启动,samba服务配置,tftp启动内核,NFS挂载根文件系统,制作根文件系统_第9张图片

 uboot 启动,samba服务配置,tftp启动内核,NFS挂载根文件系统,制作根文件系统_第10张图片

 

 uboot 启动,samba服务配置,tftp启动内核,NFS挂载根文件系统,制作根文件系统_第11张图片

 

 在windows10 上成功访问了linux上的samba服务器。

 

 

 

ps:有几个只需要注意的问题:

  1,防火墙要关闭, # service iptables  stop

  2,selinux要设置成disabled,路径是/etc/sysconfig/selinux

  3,注意共享目录的权限设置

  4,要设置成不需要用户名密码直接访问,需要修改配置文件,将security设置成security = share。

 

 使用smbpasswd添加共享用户的常用方法:

    smbpasswd -a 添加用户(被添加用户必须是系统用户)

    smbpasswd -d 冻结用户 (这个用户不能用了)

    smbpasswd -e 恢复用户 (将冻结的用户解冻)

    smbpasswd -n 将用户密码设置为空 

    smbpasswd -x 删除用户

 

 

 

https://www.cnblogs.com/hxgoto/p/7071175.html

tftp 0x30008000 zImage
setenv bootcmd ‘nand read 0x30008000 060000 500000;bootm’

三、tftp服务器配置

TFTP(Trivial File Transfer Protocol,简单文件传输协议)是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。端口号为69。

转载:https://blog.csdn.net/Mr_Xuf/article/details/80359647

加载光盘

格式:mount  [选项] 设备名 挂载目录

范例:mount(空) /dev/cdrom(空) /mnt

卸载光盘

格式:umount  卸载目录

范例:umount /mnt

提示:在执行umount之前,保证已经用户已经退出mnt目录

安装软件包

格式:rpm [选项] [软件包]

 

 

配置步骤:

1.挂载光盘:mount() /dev/cdrom() /mnt。。。如图1所示

图1

2.安装软件包:rpm -ivh/mnt/Packages/tftp-server-0.49-7.el6.i686.rpm

若出现以图2所示错误:

图2

是说明tftp的安装需依赖xinetd-什么什么的这个安装包,因此先要安装xinetd-(此处按Table键自动补全)这个包。所以先安装

xinetd包。如图3

图3

3.重复步骤2。现象如图4

图4

 

到步骤3为止,tftp软件安装包安装成功。接下来是修改tftp服务器的配置。

4.打开文件。vim /etc/xinetd.d/tftp。。。我打开的界面有图5所示

图5

5.修改tftp的配置(回顾vim文本编辑器用法,链接:https://blog.csdn.net/mr_xuf/article/details/80356055),修改后的内容如图6所示

 

图6

6.重启tftp服务器。/etc/init.d/xinetd restart。。。如图7所示

图7

7.测试tftp服务。

前期准备:

首先Windows能够Ping通(注意Windows防火墙关闭)我们的Linux,其次要关闭Linux的防火墙。最后还要输入setenforcepermissive关闭安全机制。

下载测试:

将需要被下载的文件放到指定下载目录(在tftp的配置文件中我定义的是根目录下的home文件夹)打开tftp软件下载Linux上的文件。如图8所示。

tftp软件下载链接:https://pan.baidu.com/s/13BfVsWKcEfbo6661dS5bQA 密码:k3q2

四、NFS服务器配置

转载:https://blog.csdn.net/aixiaoyang168/article/details/83782336

4.1.NFS 介绍

NFS 是 Network FileSystem 的缩写,顾名思义就是网络文件存储系统,它最早是由 Sun 公司发展出来的,也是 FreeBSD 支持的文件系统中的一个,它允许网络中的计算机之间通过 TCP/IP 网络共享资源。通过 NFS,我们本地 NFS 的客户端应用可以透明地读写位于服务端 NFS 服务器上的文件,就像访问本地文件一样方便。简单的理解,NFS 就是可以透过网络,让不同的主机、不同的操作系统可以共享存储的服务。

NFS 在文件传送或信息传送过程中依赖于 RPC(Remote Procedure Call) 协议,即远程过程调用, NFS 的各项功能都必须要向 RPC 来注册,如此一来 RPC 才能了解 NFS 这个服务的各项功能 Port、PID、NFS 在服务器所监听的 IP 等,而客户端才能够透过 RPC 的询问找到正确对应的端口,所以,NFS 必须要有 RPC 存在时才能成功的提供服务,简单的理解二者关系:NFS是 一个文件存储系统,而 RPC 是负责信息的传输。

环境、软件准备

本次演示环境,我是在虚拟机上安装 Linux 系统来执行操作,以下是安装的软件及版本:

  • Oracle VirtualBox: 5.1.20 r114628 (Qt5.6.2)
  • System: CentOS Linux release 7.3.1611 (Core)
  • rpcbind: 0.2.0-38.el7.x86_64
  • nfs-utils: 1.3.0-0.54.el7.x86_64

3、NFS 服务安装

通过上边简要的介绍,我们知道 NFS 服务需要依赖 RPC 服务,所以这里 NFS 服务端需要安装 rpcbindnfs-utils,客户端只需要安装 nfs-utils 即可,由于我选用的为 CentOS 系统,所以可以使用 yum 快速的安装。

首先,确认下服务端系统是否已安装 NFS。

$ rpm -qa nfs-utils rpcbind
nfs-utils-1.3.0-0.54.el7.x86_64
rpcbind-0.2.0-38.el7.x86_64

注意:这里我已经安装完毕,若为空,则说明未安装。

然后,安装 NFS 服务

# 服务端
$ yum install -y nfs-utils rpcbind
1.客户端
$ yum install -y nfs-utils

另:Ubuntu 16.04 安装命令为:

# 服务端
apt install nfs-kernel-server
# 客户端
apt install nfs-common

4.2.NFS 配置及使用

我们在服务端创建一个共享目录 /data/share ,作为客户端挂载的远端入口,然后设置权限。

$ mkdir -p /data/share
$ chmod 666 /data/share

然后,修改 NFS 配置文件 /etc/exports

$ vim /etc/exports
/data/share 10.222.77.0/24(rw,sync,insecure,no_subtree_check,no_root_squash)

说明一下,这里配置后边有很多参数,每个参数有不同的含义,具体可以参考下边。此处,我配置了将 /data/share 文件目录设置为允许 IP 为该 10.222.77.0/24 区间的客户端挂载,当然,如果客户端 IP 不在该区间也想要挂载的话,可以设置 IP 区间更大或者设置为 * 即允许所有客户端挂载,例如:/home *(ro,sync,insecure,no_root_squash) 设置 /home 目录允许所有客户端只读挂载。

参数 说明
ro 只读访问
rw 读写访问
sync 所有数据在请求时写入共享
async nfs 在写入数据前可以响应请求
secure nfs 通过 1024 以下的安全 TCP/IP 端口发送
insecure nfs 通过 1024 以上的端口发送
wdelay 如果多个用户要写入 nfs 目录,则归组写入(默认)
no_wdelay 如果多个用户要写入 nfs 目录,则立即写入,当使用 async 时,无需此设置
hide 在 nfs 共享目录中不共享其子目录
no_hide 共享 nfs 目录的子目录
subtree_check 如果共享 /usr/bin 之类的子目录时,强制 nfs 检查父目录的权限(默认)
no_subtree_check 不检查父目录权限
all_squash 共享文件的 UID 和 GID 映射匿名用户 anonymous,适合公用目录
no_all_squash 保留共享文件的 UID 和 GID(默认)
root_squash root 用户的所有请求映射成如 anonymous 用户一样的权限(默认)
no_root_squash root 用户具有根目录的完全管理访问权限
anonuid=xxx 指定 nfs 服务器 /etc/passwd 文件中匿名用户的 UID
anongid=xxx 指定 nfs 服务器 /etc/passwd 文件中匿名用户的 GID

接下来,我们先启动 RPC 服务。

$ service rpcbind start
#或者使用如下命令亦可
$ /bin/systemctl start rpcbind.service

4.3.查看 NFS 服务项 rpc 服务器注册的端口列表

$ rpcinfo -p localhost
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper

注意:此时我们还没有启动 NFS 服务,只监听了 111 端口,接着我们来启动 NFS 服务,再来看下注册的端口列表。

# 启动 NFS 服务
$ service nfs start
# 或者使用如下命令亦可
/bin/systemctl start nfs.service

4.4.启动 NFS 服务后 rpc 服务已经启用了对 NFS 的端口映射列表

rpcinfo -p localhost
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
100024 1 udp 33745 status
100024 1 tcp 36980 status
100005 1 udp 20048 mountd
100005 1 tcp 20048 mountd
100005 2 udp 20048 mountd
100005 2 tcp 20048 mountd
100005 3 udp 20048 mountd
100005 3 tcp 20048 mountd
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100227 3 tcp 2049 nfs_acl
100003 3 udp 2049 nfs
100003 4 udp 2049 nfs
100227 3 udp 2049 nfs_acl
100021 1 udp 38960 nlockmgr
100021 3 udp 38960 nlockmgr
100021 4 udp 38960 nlockmgr
100021 1 tcp 38362 nlockmgr
100021 3 tcp 38362 nlockmgr
100021 4 tcp 38362 nlockmgr

我们发现,启动了 NFS 服务后,rpc 注册的端口列表明显增多。OK 现在服务端都启动起来了,在服务端看下是否正确加载了设置的 /etc/exports 配置。

$ showmount -e localhost
Export list for localhost:
/data/share 10.222.77.0/24

最后,在另一台 Linux 虚拟机上测试一下,是否能够正确挂载吧。首先,我们可以在客户端查看下 NFS 服务端 (上边服务端 IP 为:10.222.77.86) 设置可共享的目录信息。

# showmount -e 10.222.77.86
Export list for 10.222.77.86:
/data/share 10.222.77.0/24
$ mkdir -p /share

最后,挂载远端目录到本地 /share 目录。

$ mount 10.222.77.86:/data/share /share
$ df -h | grep 10.222.77.86
Filesystem                 Size  Used  Avail Use% Mounted on
10.222.77.86:/data/share   27G   11G   17G   40%  /share

可以看到,可以正确将远端 NFS 目录挂载到本地。注意:挂载点 /share 目录必须已经存在,而且目录中没有文件或子目录。

最后,我们在 NFS 服务端 /data/share 目录下创建一个文件,看下客户端是否能够正确读取并修改。

# 服务端写入
$ echo "This is NFS server." > /data/share/nfs.txt
# ll /data/share/
total 4
-rw-r--r-- 1 root root 20 Nov  5 16:49 nfs.txt
  • 客户端读取
    $ ll /share/
    total 4
    -rw-r–r-- 1 root root 20 Nov 5 16:49 nfs.txt
    $ cat /share/nfs.txt
    This is NFS server.

  • 客户端写入
    $ echo “This is NFS client.” >> /share/nfs.txt

  • 服务端读取
    $ cat /data/share/nfs.txt
    This is NFS server.

都是木有问题的,这是因为上边设置了 NFS 远端目录权限为 rw 拥有读写权限,如果设置为 ro,那么客户端只能读取,不能写入,根据实际应用场景合理配置,这里就不在演示了。这里提一下,NFS 默认使用用 UDP 协议来进行挂载,为了提高 NFS 的稳定性,可以使用 TCP 协议挂载,那么客户端挂载命令可使用如下命令:

$ mount 10.222.77.86:/data/share /share -o proto=tcp -o nolock

最后,如果客户端要卸载 NFS 挂载的话,使用如下命令即可。

$ umount /share

好了,上边简单介绍了 NFS 安装及配置使用,使用它我们可以很方便的透过网络,让不同的主机、操作系统实现共享存储。下一篇,我们继续研究 Kubernetes 集群中各种方式挂载 NFS,来实现挂载网络文件存储系统。

参考资料

  • github kubeasz/nfs-server.md

五、制作根文件系统

5.1.文件系统

  1. 按照固定格式组织的目录与文件
  2. 在特定的存储介质上管理这些目录和文件需要的数据

5.2.创建文件系统

  • 创建一些目录
    1.mkdir rootfs
    2.cd rootfs && mkdir bin dev etc lib proc sbin sys usr mnt tmp var
  1. mkdir usr/bin usr/lib usr/sbin lib/modules
  • 创建设备文件
  1. cd dev/
  2. mknod -m 666 console c 5 1
  3. mknod -m 666 null c 1 3
  • 安装/etc (一些不会随平台改变的配置文件)
  1. etc.tar
    提取码:7ame
    2.tar cvf etc.tar /xxx/rootfs
  • 编译内核模块
    进入Linux内核目录
    make modules ARCH=arm CROSS_COMPILE=arm-linux-
  • 安装内核模块
    make modules_install ARCH=arm INSTALL_MOD_PATH=/xxx/rootfs
  • Busybox(嵌入式开发中瑞士军刀)配置

BusyBox 是一个集成了三百多个最常用Linux命令和工具的软件。BusyBox 包含了一些简单的工具,例如ls、cat和echo等等,还包含了一些更大、更复杂的工具,例grep、find、mount以及telnet。有些人将 BusyBox 称为 Linux 工具里的瑞士军刀。简单的说BusyBox就好像是个大工具箱,它集成压缩了 Linux 的许多工具和命令,也包含了 Android 系统的自带的shell。

  1. 进入busybox 目录执行
    make menuconfig
    a. 进入Busybox Setting->build options->
  • 选中 “Build busybox as a static binary”,静态链接*
  • Cross Compile prefix(arm-linux-)
  • Installation options->
    选中“Don’t use /usr”,选中该选项就可以避免busybox被安装到宿主系统的/usr目录下,防止破坏宿主系统

b. Busybox Install prefix(/xxx/rootfs)
表明编译后busybox的安装位置
2.编译:make modules ARCH=arm CROSS_COMPILE=arm-linux-
3.安装:make install
4.ln -s ./bin/busybox init

5.2.文件系统

存储类型 文件系统 特点
NOR FLASH(FLASH) JFFS2 读、写,数据压缩
NAND FLASH(FLASH) Yaffs 读、写,数据不压缩
(FLASH) Cramfs 只读文件系统以压缩方式存储
Network File System(NFS) 网络文件系统 开发阶段使用的非常多的文件系统
Initramfs(RAM)
  • 配置内核支持NFS
  1. 进入内核目录:make menuconfig
    a. Genearl setup->取消Initial RAM
    b. File System->Network File System
    (* ) NFS Client System
    (
    *) root file system on NFS
  2. 重新编译内核
    make uIamge ARCH=arm CROSS_COMPILE=arm-linux-

六、 菜鸟学习嵌入式 问题笔记之 关于-/bin/sh: 命令:not found的解决办法(busybox)

转载:https://blog.csdn.net/nanhangfengshuai/article/details/50499246

  在跟着韦东山老师的视频第12课,字符设备驱动程序之LED驱动程序,编写了个firstdrvtest.c文件,在虚拟机下,用交叉工具编译器arm-linux-gcc -o first firstdrvtest,然后拷贝到之前制作好的/home/S4-ARM/lesson4/rootfs目录下,通过nfs(network file system)挂载到OK6410开发板上面,实现同步。

当我用./first 命令执行的时候,提示错误,-/bin/sh: ./first: not found,,,,,顿时无语了     在经过查找资料后,下面是我的的解决办法:

     一开始我以为是first没有运行权限,不过我给了它运行权限还是提示同样的错误。我在网上搜了下找到了原因:只所以提示“-/bin/sh: ./first: not found”,是因为我没有拷first所需的库文件。1.在虚拟机下,通过命令arm-linux-readelf -a first,然后在输出的内容中找到Program Headers:,这里就有first所需的库文件。

如上图知道,我所需要的是/lib/ld-linux.so.3这个库文件,然后我需要到/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib下的动态库中找寻所需的库/lib/ld-linux.so.3。。。。。

在这个目录下, 用命令 #cp ld-linux.so.3 /home/S4-ARM/lesson4/rootfs/lib   

这样之后,在到开发板环境下,#cd /lib/  #ls ,会发现,/lib/目录下存放着库 ld-linux.so.3     

之后在执行命令 #./first  ,会发现,正常运行了。问题就解决了。

 

你可能感兴趣的:(嵌入式开发)