网站首页 > 开源技术 正文
挖宝
学习如何简化水
、燃气、热量计
量应用设计
长摁识别
1 前言
1.1 FHS(Filesystem Hierarchy Standard)标准介绍
当我们在linux下输入ls / 的时候,见到的目录结构以及这些目录下的内容都大同小异,这是因为所有的linux发行版在对根文件系统布局上都遵循FHS标准的建议规定。该标准规定了根目录下各个子目录的名称及其存放的内容:
目录名 | 存放的内容 |
/bin | 必备的用户命令,例如ls、cp等 |
/sbin | 必备的系统管理员命令,例如ifconfig、reboot等 |
/dev | 设备文件,例如mtdblock0、tty1等 |
/etc | 系统配置文件,包括启动文件,例如inittab等 |
/lib | 必要的链接库,例如C链接库、内核模块 |
/home | 普通用户主目录 |
/root | root用户主目录 |
/usr/bin | 非必备的用户程序,例如find、du等 |
/usr/sbin | 非必备的管理员程序,例如chroot、inetd等 |
/usr/lib | 库文件 |
/var | 守护程序和工具程序所存放的可变,例如日志文件 |
/proc | 用来提供内核与进程信息的虚拟文件系统,由内核自动生成目录下的内容 |
/sys | 用来提供内核与设备信息的虚拟文件系统,由内核自动生成目录下的内容 |
/mnt | 文件系统挂接点,用于临时安装文件系统 |
/tmp | 临时性的文件,重启后将自动清除 |
1.2 制作根文件系统就是要建立以上的目录,并在其中建立完整目录内容。其过程大体包括:
- 编译和安装busybox,生成/bin、/sbin、/usr/bin、/usr/sbin目录
- 利用交叉编译工具链,构建/lib目录
- 手工构建/etc目录
- 制作根文件系统的镜像文件
1.3 准备工作:
- Linux操作系统
- 成功安装交叉编译器(for zynq)
- 测试平台:米联客Miz702开发板
- 软件环境: VM10+Ubuntu14.04 LTS
1.4 测试效果:
从上一幅图可以看出,虽然已经成功制作了ramdisk文件系统,但是一些基本的配置还是没有能够添加进去,我在测试tftp指令的时候发现网络连接失败,研究了一下发现是没有为开发板设置IP地址,手动设置之后,tftp指令测试成功。
由此看来,后续还会有各种问题冒出来,到时候再“逢山开路”吧。
2 ramdisk文件系统制作过程
2.1 利用busybox生成/bin、/sbin、/usr/bin、/usr/sbin目录
I) 首先下载BusyBox源码,使用命令
git clone git://git.busybox.net/busybox
II) 下载后,切换到busybox目录,并进行默认配置
make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi- defconfig
III) 修改安装路径为/home/devel/_rootfs(这里不做修改也是可以的,如果未配置安装路径,下文的路径使用默认路径即可,如果想省事,这里可以直接跳过这一步)。
使用命令make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi- menuconfig打开可视化界面配置。
打开图形界面时碰到如下错误,之前也碰到过一次,手动修改了配置文件,没在意,这次搞定了,原因是terminal和虚拟机的窗口太小了,不足以显示配置所用的界面。将虚拟机和terminal的窗口都最大化,再运行make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi- menuconfig即可(其他工程的编译配置是类似的)。
逐一进入 BusyBox Settings->Installation Options->BusyBox installation prefix
将目录设置为 /home/devel/_rootfs,保存并退出。
IV) 编译并安装busybox,命令为make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi- install
安装好后,我们能够在/home/devel/_rootfs目录下看到生成了的bin sbin usr/bin usr/sbin 目录,其下包含了我们常用的命令,这些命令都是指向bin/busybox的软链接。安装好之后,终端打印情况如下图所示。
V) 编译过程中碰到的错误有:
编译错误1:
错误原因:MTD_FILE_MODE_RAW未定义
问题分析:该变量定义在系统头文件mtd-abi.h中,而nandwrite.c没有成功包含该文件
解决办法:首先将mtd-adi.h从系统usr/include/mtd/mtd-abi.h复制到busybox的include路径下,然后修改nandwrite.c,添加#include “mtd-abi.h”语句(如下图所示)。保存后编译即可通过。另一种办法是重新配置编译选项,取消nand write功能。
编译错误2:
问题原因:nsenter相关错误。
解决办法:重新配置编译选项,取消nsenter相关功能。
具体操作为:打开图形配置界面,逐层进入:Linux System Utilities -> nsenter,取消该功能。取消后效果如下图所示。
编译错误3:
问题原因:sync相关错误
解决办法:这里是因为代码版本问题,低版本的代码没有使用syncfs这个函数,编译没出现问题。我懒得用低版本代码替换了,直接取消了sync功能。
具体操作:打开图形配置界面,逐层进入Coreutils -> sync,取消该功能。取消后效果图如下。
Ps:虽然错误解决了,但是感觉有点虚,因为从配置界面上看,这块设计核心功能(core),不知道会不会用什么影响,以后使用过程中再看吧。
2.2 安装Dropbear
Dropbear是一个为我们提供SSH服务的工具。这里使用0.53.1版本
这部分主要参考网上两篇博文,具体原因也不清楚,其中一篇博文说Xilinx wiki上有文件系统的制作方法,我也没有能够找到。所以就只能依葫芦画瓢,先做好放进来吧。引用参考博文的描述:“我对dropbear的功能不是很明白,从百度上获取到的信息是“dropbear实现完整的SSH客户端和服务器版本2协议。它不支持SSH版本1 的向后兼容性,以节省空间和资源,并避免在SSH版本1的固有的安全漏洞。还实施了SCP的。SFTP支持依赖于一个二进制文件,可以通过提供的OpenSSH或类似的计划。”由于xilinx wiki上有这样的步骤,还是老老实实的做吧。”
I) 下载源码
II) 解压缩
tar xfvz dropbear-0.53.1.tar.gz
III) 切换到dropbear根目录
cd dropbear-0.53.1
IV) 编译配置
./configure --prefix=/home/devel/_rootfs --host=arm-none-linux-gnueabi --disable-zlib
CC=arm-none-linux-gnueabi-gcc LDFLAGS=”-Wl,--gc-sections” CFLAGS=”-ffunction- sections -fdata-sections --Os”
其中/home/devel/_rootfs需要根据实际busybox编译后的存放路径来决定。
V) 编译
make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp" MULTI=1 strip
VI) make install,并为根文件系统的scp创建一个软连接。
sudo make install(使用sudo是为了防止权限问题造成无法创建文件夹错误)
cd /home/devel/_rootfs/usr/bin/(注意使用自己的路径替换/home/devel/_rootfs)
ln –s ../../sbin/dropbear ./scp
参考文献:
(未完待续~~)
猜你喜欢
- 2024-10-15 华硕DSL-N17U路由器新固件:版本1.1.2.2.34
- 2024-10-15 现在能直接在iPhone控制中心开启SSH了,安全,方便!
- 2024-10-15 “Commando Cat” 加密劫持活动利用远程 Docker API 服务器
- 2024-10-15 iOS 11~11.1.2 越狱工具 Electra 更新:终于支持 Cydia
- 2024-10-15 VirtualBox安装Alpine Linux(virtualbox安装openeuler)
- 2024-10-15 10.3.X越狱完美解决权限问题(越狱时提示越狱工具不能打开)
- 2024-10-15 【电子数据取证】从SSH开始使用Linux
- 2024-10-15 助力影视圈:澳州歌星Dan Sultan用3D打印制作MV视效
- 2024-10-15 在Bleichenbacher '06 十年后 RSA签名伪造攻击仍然有效
- 2024-10-15 英文有声绘本《Bear's Big Ideas》
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)