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

1、U-Boot

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

1.1 开机进入U-Boot命令行

首先将U-Boot烧进板子中做为bootloader,在开机启动出现下面的界面的时候迅速按下任意键便可进入U-Boot命令行,按下q进入U-Boot shell
在这里插入图片描述linux

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'ios

  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'git

  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前面有两个冒号,那是由于这里还能够填写一个板子的主机名,这里没有设置,因此为空。github

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

2、samba服务配置

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

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

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

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

  

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

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主机做为客户端时,所须要的工具指令集

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

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

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

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

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

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

# service smb status

# service smb start

设置开机自动启动

# chkconfig  --level 35 smb on

4、修改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 时此项才起做用)

 

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

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

# service smb restart

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

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

# useradd  laige       //由于不须要在shell中登陆,因此能够不设置密码

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

# smbpasswd -a laige

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

先查看一下linux的ip

# ifconfig eth0

ip是192.168.1.194

而后关闭防火墙

# service iptables stop

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

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

 

 

 

 

 在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 删除用户

 

 

 

http://www.javashuo.com/article/p-gkoyxznz-cm.html

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

3、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

4、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

三、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,来实现挂载网络文件存储系统。

参考资料

5、制做根文件系统

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-

6、 菜鸟学习嵌入式 问题笔记之 关于-/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  ,会发现,正常运行了。问题就解决了。