内存盘怎么打不开airplay镜像打不开所在目录

查看: 611|回复: 0
最后登录在线时间0 小时威望5238 金钱559543 注册时间阅读权限100帖子精华0积分860930UID37778
rt。原因是未被识别我大概知道是文件损坏或者是安全性的权限。
但是 这个非法查找是怎么解决的?反复在官网下PS下了很几次都不行,而且是用官网的下载助手下的。
求前辈教导。
- - 木人知道么。
一般这种情况是镜像没有下载完全
发米网官方推荐:【牛股推荐】请加微信号:famiba,每天必涨5个点!验证就发518!& && && && && && && && && && && && && && && && && && && && && && && && && & 【特瑞堡密封】请加微信号:laonanren,发米搭建的创世福瑞官网,是知名瑞典进口密封件
验证就发528!& && && && && && && & 【6miu百度云搜索】下载就上& &
Powered byLinux(66)
linux内存磁盘初始化技术
linux内存初始化技术(initrd)用于支持两阶段的系统引导过程,是在系统启动过程中被挂载的临时root文件系统(译者注:这里的root文件系统是指的根文件系统)。initrd包含很多可执行程序和驱动,并允许在临时的内存磁盘根文件系统被卸载,内存被释放后挂载真实的root文件系统。在许多嵌入式linux文件系统中,initrd是最终的根文件系统。这篇文章主要讲解了linux2.6内核的initrd技术,包括在内核中的创建及使用。
1 什么是内存磁盘初始化?
initrd挂载优先级高于真实根文件系统,它被邦定在内核上,做为内核启动过程的一部分被加载(load)。然后,做为两阶段引导过程的第一部分,内核挂载(mount)initrd,用于获得并加载真实有效的文件系统。
为了达到这个目的,initrd包含有最起码的目录与程序,例如insmod,来安装内核模块到内核中。
对于桌面或服务器linux,initrd是临时文件系统,它的生存周期很短,仅仅是做为到达真实根文件系统的桥梁。但对于没有存储设备的嵌入式系统来说,它才是永久性的根文件系统。本篇文章对这两方面均有涉及。
2 深入分析initrd
initrd包含有必须的程序和系统文件,用于支持系统的启动的第二阶段过程。创建初始化内存的方法,是随着你所使用的系统版本而改变的。从Fedora Core3以后,initrd就由回送设备(loop device)建立。什么是回送设备?它是一个设备驱动,允许你将一个文件挂载为块设备,并对其文件系统做出描述。也许loop device并不存在与你的内核中,但是你能够通过内核的配置工具(make menuconfig)打开它。路径是:Device Drivers-》Block Devices-》LoopBack Device
support。下面为检查命令:
# cp /boot/initrd.img.gz .
# gunzip initrd.img.gz
# mount -t ext -o loop initrd.img /mnt/initrd
# ls -la /mnt/initrd
现在,你可以通过查看/mnt/initrd的子目录来查看initrd的内容。需要注意的是,即使你的initrd镜像文件并不是以.gz做为后缀名,但是你同样可以通过增加此后缀名来让gunzip打开它。
从Fedora Core3开始,默认的initrd镜像就是一个压缩的gpio归档文件。除了用挂载文件的方式以外,你同样可以通过cpio归档的方式来将其挂载成使用了回送设备的压缩镜像。你可以通过以下的指令来检查这个cpio归档文件的内容:
# cp /boot/initrd-2.6.14.2.img initrd-2.6.14.2.img.gz
# gunzip initrd-2.6.14.2.img.gz
# cpio -i --make-directories & initrd-2.6.14.2.img
&&& 你看到的结果将是一个小型根文件系统,如下所示:
drwxr-xr-x 10 root root&&& 4096 May 7 02:48 .
drwxr-x--- 15 root root&&& 4096 May 7 00:54 ..
drwxr-xr-x 2 root root&&& 4096 May 7 02:48 bin
drwxr-xr-x 2 root root&&& 4096 May 7 02:48 dev
drwxr-xr-x 4 root root&&& 4096 May 7 02:48 etc
-rwxr-xr-x 1 root root&&&& 812 May 7 02:48 init
-rw-r--r-- 1 root root 1723392 May 7 02:45 initrd-2.6.14.2.img
drwxr-xr-x 2 root root&&& 4096 May 7 02:48 lib
drwxr-xr-x 2 root root&&& 4096 May 7 02:48 loopfs
drwxr-xr-x 2 root root&&& 4096 May 7 02:48 proc
lrwxrwxrwx 1 root root&&&&&& 3 May 7 02:48 sbin -& bin
drwxr-xr-x 2 root root&&& 4096 May 7 02:48 sys
drwxr-xr-x 2 root root&&& 4096 May 7 02:48 sysroot
一些小的,但是很有必要的程序组合能在./bin目录下得到,包括nash(它不是一个shell,而是一个脚本解释工具),用于加载内核模块的insmod,以及lvm等。
上面所示目录中,相对比较有趣的是root目录下的初始化文件。这些文件,和传统的linux启动过程中一样,是在initrd镜像被解压缩到RAM中时生成的。待会我们将继续探讨这个问题。
3 创建initrd的工具。
现在,让我们回到一开始的讨论:initrd的镜像是如何被创建的?在传统的linux系统中,initrd是在linux build的时候被创建的。像mkinitrd这样的许许多多的工具,都能够用于通过必须的库和模块来自动构建一个用于过渡到真实根文件系统的initrd。事实上,mkinitrd工具是一个脚本文件,因此,我们能够很清楚得看到,这个过程是如何进行的。同样的,YAIRD (Yet Another Mkinitrd)工具,也允许我们自定制每一个initrd被构建的阶段。
4 自己动手,打造自定义的初始化内存盘
由于很多基于linux的嵌入式系统都没有硬盘驱动器,initrd也可以做为永久性的根文件系统。下面我就将告诉你们,如何创建一个initrd镜像。我使用的是标准linux桌面系统,因此大家即使没有嵌入式目标设备也可以照着做。除了交叉编译以外,嵌入式目标文件的构建过程是相同的。
#!/bin/bash
# Housekeeping...
rm -f /tmp/ramdisk.img
rm -f /tmp/ramdisk.img.gz
# Ramdisk Constants
RDSIZE=4000
BLKSIZE=1024
# Create an empty ramdisk image
dd if=/dev/zero of=/tmp/ramdisk.img bs=$BLKSIZE count=$RDSIZE
# Make it an ext2 mountable file system
/sbin/mke2fs -F -m 0 -b $BLKSIZE /tmp/ramdisk.img $RDSIZE
# Mount it so that we can populate
mount /tmp/ramdisk.img /mnt/initrd -t ext2 -o loop=/dev/loop0
# Populate the filesystem (subdirectories)
mkdir /mnt/initrd/bin
mkdir /mnt/initrd/sys
mkdir /mnt/initrd/dev
mkdir /mnt/initrd/proc
# Grab busybox and create the symbolic links
pushd /mnt/initrd/bin
cp /usr/local/src/busybox-1.1.1/busybox .
ln -s busybox ash
ln -s busybox mount
ln -s busybox echo
ln -s busybox ls
ln -s busybox cat
ln -s busybox ps
ln -s busybox dmesg
ln -s busybox sysctl
# Grab the necessary dev files
cp -a /dev/console /mnt/initrd/dev
cp -a /dev/ramdisk /mnt/initrd/dev
cp -a /dev/ram0 /mnt/initrd/dev
cp -a /dev/null /mnt/initrd/dev
cp -a /dev/tty1 /mnt/initrd/dev
cp -a /dev/tty2 /mnt/initrd/dev
# Equate sbin with bin
pushd /mnt/initrd
ln -s bin sbin
# Create the init file
cat && /mnt/initrd/linuxrc && EOF
#!/bin/ash
echo &Simple initrd is active&
mount -t proc /proc /proc
mount -t sysfs none /sys
/bin/ash --login
chmod +x /mnt/initrd/linuxrc
# Finish up...
umount /mnt/initrd
gzip -9 /tmp/ramdisk.img
cp /tmp/ramdisk.img.gz /boot/ramdisk.img.gz
想创建initrd的话,你需要首先创建一个空文件,将/dev/zero(0字符流)做为ramdisk.img的输入。得到的文件大小大约是4MB(有4000个1K的块组成)。接下来,用mke2fs命令来创建一个使用这个空文件的ext2文件系统。现在,这个文件就是一个ext2文件系统。ok,接下来,以回路设备的形式挂载这个文件到/mnt/initrd,现在,你就在挂载点拥有一个代表着ext2文件系统的目录,并用与存放你的initrd。其他大多数的脚本语句都是用于实现这个功能。
下一步,就是创建一些必须的子目录,用于生成你的根文件系统: /bin, /sys, /dev, 和 /pro。这里只需要少数几个目录,例如,没有/lib。但是它们已经包含了大部分功能。
如果想让你的根文件系统发挥更大的作用,请使用 BusyBox。这个工具是一个包含了许多独立工具的镜像,这些独立的工具你都能在linux中找到( ash, a等等wk, sed, insmod)。BusyBox的优势在于,它把它们集合在了一起,并分享了公用的部分,从而极大缩小了镜像的体积。这对于嵌入式系统来讲,是非常理想的。请将BustBox镜像从它的源目录中复制出来,到你的/bin目录下,这样,很多指向BusyBox工具集的符号链接将被创建,BusyBox能确定哪一个工具将被使用,并自动引用它。这个/bin目录下被创建的链接的小型集合将用于对启动脚本的支持。
再下一步,就是一小部分特殊设备文件的创建。我从我的/dev文件夹中直接拷贝了出来,别忘了加上-a选项来保持它们原有的属性。
倒数第二步,就是生成linuxrc文件。在内核挂载了内存盘之后,它将搜索并执行相关的启动文件,如果没有找到,内核就将linuxrc文件做为其启动脚本。你最好在这个文件中对环境变量做一些基本设置,例如挂载/proc文件系统等。除了/proc外,我还挂载了/sys文件系统,将消息发送给终端。最后,我调用ash并通过它和根文件系统交互。最后记住,用chmod把linuxrc文件的属性改为可执行。
最后,你的根文件系统算是ok了。现在它并没有被挂载,用gzip将它压缩,并将压缩后的文件ramdisk.img.gz拷贝到/boot目录下,这样它就能被GRUB调用。
想要构建你的初始化ram盘的话,你只需要调用mkird,镜像就将自动创建并拷贝到/boot目录下。
5 测试自定义的初始化RAM盘。
&& 你拥有的新的initrd镜像是在/boot目录下,因此,下一步就是要用你默认的内核来测试它。ok,现在你可以先重新启动你的linux系统,当GRUB引导画面出现时,按下C键,打开GRUB的命令行工具。现在,你就能通过GRUB确定启动专门的内核和initrd镜像。内核命令是允许你定制内核文件的,而initrd命令则允许你指定专门的initrd镜像文件。当它们都被指定之后,通过启动命令来启动内核,如下所示:
&&& GNU GRUB version 0.95 (638K lower / 97216K upper memory)
[ Minimal BASH-like line editing is supported. For the first word, TAB
lists possible command completions. Anywhere else TAB lists the possible
completions of a device/filename. ESC at any time exits.]
grub& kernel /bzImage-2.6.1
&& [Linux-bzImage, setup=0x1400, size=0x29672e]
grub& initrd /ramdisk.img.gz
&& [Linux-initrd @ 0x5f2a000, 0xb5108 bytes]
grub& boot
Uncompressing Linux... OK, booting the kernel.
在内核启动之后,它开始检查initrd镜像是否可用,如果答案是确定的,那么就作为根文件系统加载并挂载它。下面就是这个特殊启动过程的结尾:
md: Autodetecting RAID arrays
md: autorun
md: ... autorun DONE.
RAMDISK: Compressed image found at block 0
VFS: Mounted root (ext2 file system).
Freeing unused kernel memory: 208k freed
bin&&&&&&&& etc&&&&&& linuxrc&&&&&& proc&&&&&&& sys
dev&&&&&&&& lib&&&&&& lost+found&&& sbin
/ $ cat /proc/1/cmdline
/bin/ash/linuxrc
/ $ cd bin
ash&&&&& cat&&&&& echo&&&& mount&&& sysctl
busybox dmesg&&& ls&&&&&& ps
/bin $ touch zfile
ash&&&&& cat&&&&& echo&&&& mount&&& sysctl
busybox dmesg&&& ls&&&&&& ps&&&&&& zfile
当启动之后,可以通过ash来进入命令模式。在本例中,我探究了根文件系统并向你演示了,你能通过新建文件来写入这个文件系统。只需要注意,第一步是要创建linuxrc。
6 通过初始化内存盘启动
现在,大家已经看到了如何构建并使用一个自定制的初始化内存盘,这一节则用于介绍,内核是如何辨认initrd并将其作为它的根文件系统挂载的。我将涉及一些boot chain中的主要的函数并对发生的事件做出解释。
像GRUB这样的boot loader,通常会确认即将加载的内核并复制该内核镜像与任何相关联的initrd到内存中,你可以在你linux内核源程序目录下的./init子目录中找到这些功能实现。
在内核与initrd镜像被解压缩和复制到内存后,内核被调用。此时,开始各种各样的初始化过程,最终,你会发现自己处于init/main.c:init() (subdir/file:function)。这个函数实现了很多的子系统初始化。在这里,要调用init/do_mounts.c:prepare_namespace(),用来准备命名空间(挂载dev 文件系统, RAID, 或者md, devices, 以及, 最后的initrd)。通过对 init/do_mounts_initrd.c:initrd_load()的调用,最终完成对initrd的加载。
initrd_load()调用init/do_mounts_rd.c:rd_load_image(),来决定是否通过调用init/do_mounts_rd.c:identify_ramdisk_image()来加载内存盘镜像。后面这个函数通过检查内核的编号来确定文件究竟是是minux,etc2,romfs,cramfs,还是gzip格式,直到返回initrd_load_image后,init/do_mounts_rd:crd_load()又被调用。这个函数负责分配空间给内存盘,并进行校验计算,解压缩,最后将内存盘镜像加载到内存中。此时,你就已经拥有了一个适合于挂载的,在块设备中的initrd镜像。
现在,通过调用init/do_mounts.c:mount_root()将这个块设备做为root挂载。ok,根设备就被创建了,接下来调用的函数是init/do_mounts.c:mount_block_root(),此函数又调用fs/namespace.c:sys_mount()来挂载真实的根文件系统并对其进行chdir操作。
最后,会返回到启动函数中,并调用init/main.c:run_init_process。调用的结果是,初始化进程开始(在这里是通过/linuxrc)。linuxrc可以是一个可执行程序,也可以是脚本(只要脚本解释器能够正常解释它)。
函数调用的层次关系可以从下表中看出。并不是所有与复制、挂载初始化内存盘的函数都被列举出来,这里仅仅是大概的,对整体基本流程的回顾:
init/main.c:init
init/do_mounts.c:prepare_namespace
&&& init/do_mounts_initrd.c:initrd_load
&&&&& init/do_mounts_rd.c:rd_load_image
&&&&&&& init/do_mounts_rd.c:identify_ramdisk_image
&&&&&&& init/do_mounts_rd.c:crd_load
&&&&&&&&& lib/inflate.c:gunzip
&&& init/do_mounts.c:mount_root
&&&&& init/do_mounts.c:mount_block_root
&&&&&&&& init/do_mounts.c:do_mount_root
&&&&&&&&&& fs/namespace.c:sys_mount
init/main.c:run_init_process
&&& execve
7 无盘启动的应用
同很多嵌入式系统的启动一样,本地磁盘(软驱或者光驱)对于启动内核和内存盘根文件系统来说,并不是必须的。DHCP工具能被用于确认网络参数,例如大家熟悉的IP抵制和子网掩码等。此外,TFTP能被用于将内核镜像以及初始化内存盘镜像传送到本地设备。一旦传输完成,linux内核就能被启动以及挂载initrd,和本地镜像启动的过程一样。
8 让你的initrd尽可能小
当你在构建嵌入式系统时,总是希望initrd的镜像尽可能小,恩,这里将提供一些小技巧。首先就是使用BusyBox。前面已经提到过,BusyBox包含了很多较大的工具,通常体积都以MB计算,但是它成功得将自己的体积控制在几百KB的范围内。
在本例中,BusyBox镜像使用的是静态链接,因此不需要提供任何库文件。但是,如果你需要得到标准的C库文件来满足自己的二进制程序,除了大体积的glibc库,你有其他更好的选择。第一个,小体积的uClibc库,是专门用于有空间限制的,标准C库的缩水版本。另一个适用于有空间限制环境的库是dietlib。记住,你需要在自己的嵌入式系统中,用这些库重新编译你的二进制程序。虽然使用它们会带来一些附加的工作,但是,是值得的。
初始化内存盘技术被创建的最初目的,是为了让内核通过一个临时的根文件系统来过渡到最终的根文件系统。initrd对于嵌入式linux系统同样是很有用处的:它能做为一个非持续性的根文件系统挂载到内存盘中。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:389888次
积分:4930
积分:4930
排名:第4823名
原创:54篇
转载:230篇
评论:29条
(1)(1)(1)(3)(1)(1)(3)(1)(5)(2)(1)(1)(1)(4)(2)(3)(5)(4)(3)(1)(1)(1)(4)(1)(2)(2)(10)(1)(3)(3)(36)(11)(1)(2)(4)(4)(3)(7)(4)(3)(2)(1)(2)(3)(2)(1)(1)(3)(1)(1)(2)(10)(3)(2)(1)(2)(8)(3)(2)(1)(6)(4)(4)(2)(1)(2)(2)(1)(4)(10)(2)(24)(9)(12)(1)(2)(1)(1)小长假!小长假!小长假!
这两年来,人们似乎一直在讨论 Mac Pro 是不是真的要被放弃了。这也是没有办法的事,...
各位同学们可以捧着你们的手机,亲自体验一下这款魔性的网红游戏了。
明年,我们还将迎来一款重新设计的Mac Pro。
初代iPhone的设计元素加上无边框屏幕,其实它们呆在一起看起来真的非常和谐。
这么发达的一个国家,苹果怎么可能不行动呢?
对苹果而言,硬件只是其交付其他创造的一种工具,如用户界面、应用和服务。
4月了啊,宇宙飞船啥时候起飞。
Full Fat 最近给我们带来了新作《方块棒球(Blocky Baseball)》,如果你仔细观察会发...
如果哪一天自己也能开着车来一段酷炫的漂移就好了。
Tactile Entertainment 推出的《饼干猫》系列最近又多了一个新成员《饼干猫打泡泡(Co...
游戏中我们还是可以体验一下驾驶着巨大的机器人保护地球的感觉。
《翻滚吧齿轮君》是一款玩法新奇的冒险闯关游戏,这一次我们要在异次元脑回路中展开探...
在画面风格上,游戏依然延续了像素风格的画面设计,不过在精细度上还是有了一个比较明...
《火力掩护》在玩法和剧情的设计上有着不错的新意,同时画面上也有着明显的风格,加上...
不过这样子的Magic Keyboard会不会很贵?
新iPad某个零件坏了的话,请拿出你的旧iPad Air,随便拆,随便拆~
过去几年,如果你一直关注苹果对技术核心的垂直整合,对于其放弃英国 Imagination Tec...
需要的就赶紧买吧。
苹果第一款真正无线的耳机产品 AirPods 受到了不少用户的追捧,但是也有用户担心这款...
事实上,关于苹果会在 Apple Watch 中加入移动数据连接的传闻已经有很长一段时间。
Apple SIM 是苹果公司于 2014 年推出的 SIM 卡,它和 4G 版本的 iPad Air 2 一同亮相...
有用户在苹果支持论坛和社交媒体上表示,macOS 10.12.4 对 USB 耳机的音质造成了一些...
各位有谁知道dmg磁盘镜像打不开,显示原因是非法查找是怎么回事?
注册时间 最后登录
在线时间123 小时 UID
主题帖子人气
小苹果, 积分 13, 距离下一级还需 37 积分
rt。&&原因是未被识别我大概知道是文件损坏或者是安全性的权限。
但是 这个非法查找是怎么解决的?&&反复在官网下PS下了很几次都不行,而且是用官网的下载助手下的。
求前辈教导。
注册时间 最后登录
在线时间123 小时 UID
主题帖子人气
- - 木人知道么。
注册时间 最后登录
在线时间7017 小时 UID
帖子 精华7
主题帖子人气
一般这种情况是镜像没有下载完全
威锋旗下产品
Hi~我是威威!
沪公网安备 29号 | 沪ICP备号-1
新三板上市公司威锋科技(836555)
增值电信业务经营许可证:
Powered by Discuz!您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
最详细的RAMDiskplus9x10x做内存盘存放锐起无盘镜像步骤教程.doc13页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
文档加载中...广告还剩秒
需要金币:150 &&
最详细的RAMDiskplus9x10x做内存盘存放锐起无盘镜像步骤教程
你可能关注的文档:
··········
··········
锐起无盘服务器中使用RAMDisk plus 9.x/10.x 做内存盘存放镜像步骤详解
安装步骤1:安装文件
解压缩……
安装步骤2:一路点击“next”,“OK”……(安装路径)
接受服务条款安装步骤3:添写注册码
在这里暂停一下……
安装步骤4:打开注册机,选择" RamDisk Plus 9.",点击"Generate"生成注册码。
安装步骤5:将步骤4中的" Name"的字符串填写到"name"中;将""中的字符串填写到"sofyware license key"中。同时还是选中"only for me",免得你电脑上其他用户动用这个软件。
至此基本上已完成安装的关键步骤步骤6:打开软件
步骤7:这是第一次使用,所以要创建一个虚拟硬盘:点击绿色的“+”图标
步骤8:默认的大小是32M。根据你的内存大小以及你的用途,你可以自己分配。可以M,比镜像稍大点,安全些。
步骤9:这里最好不要选中这个多选框,选中则表示当我们移除虚拟磁盘时会清空其所文件,我们等会儿要往里面装入一些东西。
步骤10: 这里为创建的虚拟磁盘选择盘符,随便。
步骤11:这里选择磁盘的格式,一般选择ntfs或fat32,就选NTFS 吧。这里先不要选中第一个复选框“Create '\temp' folder”(创建系统临时文件目录),后面会说道更有效的做法;第二个“Compress file”只针对NTFS,也不选,压缩系统的不常用文件用的。
步骤12:个人认为这里不选似乎更好。若选择,在手动移除虚拟磁盘的情况下,会延长开关机的时间,而且是大大的延迟,呵……后面会说到怎样手动保存磁盘内容。若你愿意其自动保存并能容忍这么长的开关机时间,也行。
步骤13:这样我们就拥有了第一个虚拟,cif镜像文件SsRd000x,x为数字,第个盘为1,第二个盘为2,以此类推,扩展名为cif,这文件就是在Ramdisk手动或自动保存虚拟磁
正在加载中,请稍后...

我要回帖

更多关于 airplay镜像打不开 的文章

 

随机推荐