⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 buffer-format.txt

📁 linux 内核源代码
💻 TXT
字号:
		       initramfs buffer format		       -----------------------		       Al Viro, H. Peter Anvin		      Last revision: 2002-01-13Starting with kernel 2.5.x, the old "initial ramdisk" protocol isgetting {replaced/complemented} with the new "initial ramfs"(initramfs) protocol.  The initramfs contents is passed using the samememory buffer protocol used by the initrd protocol, but the contentsis different.  The initramfs buffer contains an archive which isexpanded into a ramfs filesystem; this document details the format ofthe initramfs buffer format.The initramfs buffer format is based around the "newc" or "crc" CPIOformats, and can be created with the cpio(1) utility.  The cpioarchive can be compressed using gzip(1).  One valid version of aninitramfs buffer is thus a single .cpio.gz file.The full format of the initramfs buffer is defined by the followinggrammar, where:	*	is used to indicate "0 or more occurrences of"	(|)	indicates alternatives	+	indicates concatenation	GZIP()	indicates the gzip(1) of the operand	ALGN(n)	means padding with null bytes to an n-byte boundary	initramfs  := ("\0" | cpio_archive | cpio_gzip_archive)*	cpio_gzip_archive := GZIP(cpio_archive)	cpio_archive := cpio_file* + (<nothing> | cpio_trailer)	cpio_file := ALGN(4) + cpio_header + filename + "\0" + ALGN(4) + data	cpio_trailer := ALGN(4) + cpio_header + "TRAILER!!!\0" + ALGN(4)In human terms, the initramfs buffer contains a collection ofcompressed and/or uncompressed cpio archives (in the "newc" or "crc"formats); arbitrary amounts zero bytes (for padding) can be addedbetween members.The cpio "TRAILER!!!" entry (cpio end-of-archive) is optional, but isnot ignored; see "handling of hard links" below.The structure of the cpio_header is as follows (all fields containhexadecimal ASCII numbers fully padded with '0' on the left to thefull width of the field, for example, the integer 4780 is representedby the ASCII string "000012ac"):Field name    Field size	 Meaningc_magic	      6 bytes		 The string "070701" or "070702"c_ino	      8 bytes		 File inode numberc_mode	      8 bytes		 File mode and permissionsc_uid	      8 bytes		 File uidc_gid	      8 bytes		 File gidc_nlink	      8 bytes		 Number of linksc_mtime	      8 bytes		 Modification timec_filesize    8 bytes		 Size of data fieldc_maj	      8 bytes		 Major part of file device numberc_min	      8 bytes		 Minor part of file device numberc_rmaj	      8 bytes		 Major part of device node referencec_rmin	      8 bytes		 Minor part of device node referencec_namesize    8 bytes		 Length of filename, including final \0c_chksum      8 bytes		 Checksum of data field if c_magic is 070702;				 otherwise zeroThe c_mode field matches the contents of st_mode returned by stat(2)on Linux, and encodes the file type and file permissions.The c_filesize should be zero for any file which is not a regular fileor symlink.The c_chksum field contains a simple 32-bit unsigned sum of all thebytes in the data field.  cpio(1) refers to this as "crc", which isclearly incorrect (a cyclic redundancy check is a different andsignificantly stronger integrity check), however, this is thealgorithm used.If the filename is "TRAILER!!!" this is actually an end-of-archivemarker; the c_filesize for an end-of-archive marker must be zero.*** Handling of hard linksWhen a nondirectory with c_nlink > 1 is seen, the (c_maj,c_min,c_ino)tuple is looked up in a tuple buffer.  If not found, it is entered inthe tuple buffer and the entry is created as usual; if found, a hardlink rather than a second copy of the file is created.  It is notnecessary (but permitted) to include a second copy of the filecontents; if the file contents is not included, the c_filesize fieldshould be set to zero to indicate no data section follows.  If data ispresent, the previous instance of the file is overwritten; this allowsthe data-carrying instance of a file to occur anywhere in the sequence(GNU cpio is reported to attach the data to the last instance of afile only.)c_filesize must not be zero for a symlink.When a "TRAILER!!!" end-of-archive marker is seen, the tuple buffer isreset.  This permits archives which are generated independently to beconcatenated.To combine file data from different sources (without having toregenerate the (c_maj,c_min,c_ino) fields), therefore, either one ofthe following techniques can be used:a) Separate the different file data sources with a "TRAILER!!!"   end-of-archive marker, orb) Make sure c_nlink == 1 for all nondirectory entries.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -