当前位置:文档之家› lfs linux文件系统 搭建教程

lfs linux文件系统 搭建教程

lfs linux文件系统 搭建教程
lfs linux文件系统 搭建教程

磁盘分区:

输入命令:

代码:cfdisk将出现分区界面

这里可以按照你自己的需要的分区,这里我按照设置一个根分区和一个交换分区为例,交换分区占用512M,其余的全部分给根分区。

磁盘分区作用

/dev/sda1swap

/dev/sda2作为目标系统根目录

保存退出后进行磁盘分区的格式化

代码:mkswap /dev/sda1

mkfs.xfs /dev/sda2相关知识点:

磁盘格式化一定要在磁盘分区未进行加载前进行。

mkswap是用于将磁盘分区格式化为交换分区的命令。

这里我将/dev/sda2格式化了为Xfs格式,如果你喜欢其它格式的文件系统,你可以使用相应的命令来格式化。

注意:这里要根据实际情况建立和设置分区,如果你不太清楚这个问题,请先不要开始,否则可能造成难以恢复的损失!(这里只是根据VMWare里面的情况做的例子,在VMWare中相对安全些,建议初学者在虚拟机中开始。)

如果你的内存不太大,想在编译期间就使用上交换分区的话,可使用下面的命令激活交换分区

swapon /dev/sda1

相关知识点:

swapon用于激活交换分区

swapoff用于将激活的交换分区停用

可以通过free命令来查看当前的内存使用情况

创建LFS的“创作基地”

代码:export LFS=/mnt/lfs

mkdir -pv $LFS相关知识点:

export LFS=/mnt/lfs这条命令的作用是为了后面引用“创作基地”的绝对路径方便而设置LFS这样的环境变量。

加载/dev/sda2到“创作基地”

代码:mount /dev/sda2 $LFS

创建必要的目录并设置属性

创建源代码编译用目录

代码:mkdir -v $LFS/sources

chmod -v a+wt $LFS/sources相关知识点:

chmoda+wt是将目录或文件的属性设置为777,这样任何人都可以对其进行读写。

创建工具链目录

代码:mkdir -v $LFS/tools

ln -sv $LFS/tools /相关知识点:

上面这两句就建立了神奇的工具链目录(是工具链目录不是工具链),这样的创建方式

是为了在创建工具链和使用工具链创建目标系统的时候对于工具链的位置都是/tools,这样可保证工具链的正常使用

创建lfs用户

代码:groupaddlfs

useradd -s /bin/bash -g lfs -m -k /dev/null lfs设置lfs密码,设置为空就行了,也就是输入密码的时候直接回车就成。

代码:passwdlfs将tools和sources目录的用户改为lfs,以便后面使用lfs来操作这两个目录代码:chown -v lfs $LFS/tools

chown -v lfs $LFS/sources登陆到lfs用户

代码:su - lfs这时候你会发现命令行提示符已经由#改为了$

相关知识点:

其实如果不使用lfs用root也是能完成工具链的,不过需要对root的环境变量进行修改,还要防止因为输入错误而导致覆盖主系统下的文件,所以LFS手册中制作工具链部分就是为了解决这种意外的发生而用lfs用户来建立工具链

建立lfs用户的环境

代码:cat > ~/.bash_profile ~/.bashrc这里利用了bash的环境变量的设置文件将lfs的环境设置为符合编译工具链要求的最少的环境参数

这里面最重要的就是PATH这个参数,目的是为了能够利用工具链里面的工具制作工具链:首先查找/tools/bin下是否有需要的命令,如果没有再到/bin和/usr/bin下找,然后用/bin 或/usr/bin下面的命令来帮助生成需要的命令并放在/tools/bin下,这样此消彼涨,最终可完成一个自给自足的工具链。

到此为止就可以开始工具链的制作了,不过制作LFS是一个漫长而浩大的工程,所以要一直开机直到完成有时候比较困难,特别是在机器速度比较慢的情况下,能够重新启动到最后工作的状态是很重要的。在不同的阶段重新启动并恢复状态的步骤不完全相同,所以本文会在不同的阶段讨论重新启动恢复到工作状态的方法和步骤。

从现在开始一直到第五章结束,也就是完成Stripping中间的步骤中如果重新启动的恢复步骤:

1.重新启动计算机,并从LiveCD启动

相关知识点:在VMWare中因为磁盘已经有了信息了,所以会从磁盘启动,需要在启动虚拟机中的机器时按F2进入虚拟机的虚拟BIOS,然后在BOOT中设置第一启动为CD-ROM,保存退出即可

2.加载分区

export LFS=/mnt/lfs

mkdir -pv $LFS

mount /dev/sda2 $LFS

3.加载交换分区(如果不想用交换分区或者没有交换分区可跳过此步骤)

swapon /dev/sda1

4.建立工具链的链接

ln -sv $LFS/tools /

5.创建lfs用户

groupaddlfs

useradd -s /bin/bash -g lfs -m -k /dev/null lfs

passwdlfs

chown -v lfs $LFS/tools

chown -v lfs $LFS/sources

su - lfs

6.建立lfs用户的环境

cat > ~/.bash_profile ~/.bashrc进入LFS包编译目录

代码:cd $LFS/sourcesBinutils-2.15.Array4.0.2.2 - Pass 1

代码:tarxvf /lfs-sources/binutils-2.15.Array4.0.2.2.tar.bz2

cd binutils-2.15.Array4.0.2.2相关知识点:

大家可以注意到后面所有的解包命令均使用tar xvf来完成,而不管文件的压缩方式是bz2还是gz,这是因为较新的tar程序都具有自动识别后缀名并自动调用相应的解压缩工具的能力,所以可以不需要指定压缩方式,但对于早期的tar命令则可能不具备这个功能因此需要你根据包的压缩方式来指定,如bz2使用j,gz使用z,对应上面的binutils则是tar xvjf /lfs-sources/binutils-2.15.Array4.0.2.2.tar.bz2

因LFS的LiveCD中提供的tar版本比较新,后面制作的tar版本也比较新,因此支持自动识别的能力,同时为了使文章的解压命令看起来比较统一方便维护(同样对于想制作成脚本的朋友也会比较方便)因此后面统一使用tar xvf来解压。

如果你的主系统是使用GCC4的话,这里需要打一个GCC4的编译补丁,对于使用LFS-6.1.1-3的LiveCD上的GCC是3.4.3,所以不打补丁也可以,当然打上也无所谓。

代码:patch -Np1 -i /lfs-sources/binutils-2.15.Array4.0.2.2-gcc4-1.patch接着我们需要建立一个目录,因为binutils建议使用一个空目录来编译,所以

代码:mkdir -v ../binutils-build

cd ../binutils-build

../binutils-2.15.Array4.0.2.2/configure --prefix=/tools --disable-nls

make

make install

make -C ld clean

make -C ld LIB_PATH=/tools/lib

cd ..注意:这里暂时不要删除binutils-build目录,因为后面需要这个编译过的binutils-build 相关知识点:

其实我个人觉得这个binutils的版本不太好,建议使用目前的最新稳定版本binutils-2.16.1,不需要打补丁,而且在各种主系统下进行编译成功率非常高,而binutils-2.15.Array4.0.2.2经常在一些系统下编译出现错误。

GCC-3.4.3 - Pass 1

代码:

tarxvf /lfs-sources/gcc-3.4.3.tar.bz2

mkdir -v gcc-build

cdgcc-build

../gcc-3.4.3/configure --prefix=/tools --libexecdir=/tools/lib \

--with-local-prefix=/tools --disable-nls\

--enable-shared --enable-languages=c

make bootstrap

make install

ln -vsgcc /tools/bin/cc

cd ..

rm -rfgcc-build

rm -rf gcc-3.4.3注意:这里不要图省事而不删gcc-3.4.3,因为这样可能会给后面的编译产生一些意外的错误。

相关知识点:

这里可以使用gcc-3.4.4或者gcc-3.4.5来替换gcc-3.4.3,不过如果想用GCC4.0.x来编译的话,要注意和gcc-3.4.x编译后面的一些软件以及调整工具链上有所不同,可参考使用GCC4.0.x的相关LFS文档。

Linux-Libc-Headers-2.6.11.2

代码:

tarxvf /lfs-sources/linux-libc-headers-2.6.11.2.tar.bz2

cd linux-libc-headers-2.6.11.2

cp -Rv include/asm-i386 /tools/include/asm

cp -Rv include/linux /tools/include

cd ..

rm -rf linux-libc-headers-2.6.11.2

Glibc-2.3.4

代码:

tarxvf /lfs-sources/glibc-2.3.4.tar.bz2

cd glibc-2.3.4

patch -Np1 -i /lfs-sources/glibc-2.3.4-fix_test-1.patch

mkdir -v ../glibc-build

cd ../glibc-build

../glibc-2.3.4/configure --prefix=/tools \

--disable-profile --enable-add-ons \

--enable-kernel=2.6.0 --with-binutils=/tools/bin \

--without-gd --with-headers=/tools/include \

--without-selinux

make

mkdir -v /tools/etc

touch /tools/etc/ld.so.conf

make install

makelocaledata/install-locales

cd ..

rm -rfglibc-build

rm -rf glibc-2.3.4提示:

glibc-2.3.4显的有点老了,如果用GCC4来编译需要打补丁,用gcc-3.4.x来编译没什么问题,不过我建议使用glibc-2.3.6,这样即使是用GCC4来编译也不需要打补丁了。

相关知识点:

这里的参数--enable-kernel=2.6.0,只是为了说明kernel的大版本,所以不需要根据实际的kernel版本来改,即使是用linux-2.6.15也一样只写2.6.0就可以了。

make localedata/install-locales将安装全部的locale,如果你不想装这么多locale的话就用localedef命令来安装,LFS手册上有例子,如果仅想加入中文的locale,就用

mkdir -pv /tools/lib/locale

localedef -i zh_CN -f GB18030 zh_CN

localedef -i zh_CN -f GBK zh_CN

localedef -i zh_CN -f UTF-8 zh_CN

localedef -i zh_CN -f GB2312 zh_CN

localedef -i zh_HK -f UTF-8 zh_CN

localedef -i zh_HK -f BIG5-HKSCS zh_CN

localedef -i zh_TW -f EUC-TW zh_CN

localedef -i zh_TW -f UTF-8 zh_CN

localedef -i zh_TW -f BIG5 zh_CN

调整工具链

代码:

cdbinutils-build

make -C ld install

cd ..

rm -rfbinutils-build

rm -rf binutils-2.15.Array4.0.2.2

SPECFILE=$(gcc --print-file specs) &&

sed ’s@ /lib/ld-linux.so.2@ /tools/lib/ld-linux.so.2@g’ $SPECFILE >tempspecfile&&

mv -f tempspecfile $SPECFILE &&

unset SPECFILE

rm -vf /tools/lib/gcc/*/*/include/{pthread.h,bits/sigthread.h}

相关知识点:

如果之前不小心把binutils-build给删掉了,那么也不要紧张,不执行make -C ld install 也可以。

工具链的调整方法有好几种,而且不同版本GCC的specs可能会有不同,但实际上都是把specs文件中的/lib/ld-linux.so.2替换成了/tools/lib/ld-linux.so.2,所以即使有些文章在调整工具链上的命令和LFS手册上的不一样也不用太奇怪,当然手工直接编辑specs文件也可以。但如果是GCC4.0.x的话可能不会自动产生specs文件,这时候可以先生成specs文件然后在修改,可参考《用GCC4.0.1编译LFS》

测试工具链的调整

echo ’main(){}’ >dummy.c

cc dummy.c

readelf -l a.out | grep ’: /tools’

如果输出大致如下

[Requesting program interpreter: /tools/lib/ld-linux.so.2]

则表示调整成功,因为所有的库已经连接到了/tools/lib下。

rm -rfa.outdummy.c

测试工具安装

说明:这部分将安装3个用于第六章各种源码包编译后的测试的工具,所以如果你不打算做make check之类的事情,那么这3个包可以不装。

Tcl-8.4.Array Expect-5.43.0 DejaGNU-1.4.4

代码:

tarxvf /lfs-sources/tcl8.4.Array-src.tar.bz2

cd tcl8.4.Array/unix

./configure --prefix=/tools

make

make install

cd ..

export TCLPATH=$(pwd)

ln -sv tclsh8.4 /tools/bin/tclsh

cd ..

tarxvf /lfs-sources/expect-5.43.0.tar.bz2

cd expect-5.43

patch -Np1 -i /lfs-sources/expect-5.43.0-spawn-1.patch

./configure --prefix=/tools --with-tcl=/tools/lib --with-tclinclude=$TCLPATH --with-x=no make

make SCRIPTS="" install

unset TCLPATH

cd ..

tarxvf /lfs-sources/dejagnu-1.4.4.tar.bz2

cd dejagnu-1.4.4

./configure --prefix=/tools

make install

cd ..

rm -rf tcl8.4.Array

rm -rf expect-5.43

rm -rf dejagnu-1.4.4

GCC-3.4.3 - Pass 2

代码:

tarxvf /lfs-sources/gcc-3.4.3.tar.bz2

cd gcc-3.4.3

patch -Np1 -i /lfs-sources/gcc-3.4.3-no_fixincludes-1.patch

patch -Np1 -i /lfs-sources/gcc-3.4.3-specs-2.patch

mkdir -v ../gcc-build

cd ../gcc-build

../gcc-3.4.3/configure --prefix=/tools \

--libexecdir=/tools/lib --with-local-prefix=/tools \

--enable-clocale=gnu --enable-shared \

--enable-threads=posix --enable-__cxa_atexit\

--enable-languages=c,c++ --disable-libstdcxx-pch

make

make install

cd ..

rm -rfgcc-build

rm -rf gcc-3.4.3

Binutils-2.15.Array4.0.2.2 - Pass 2

代码:

tarxvf /lfs-sources/binutils-2.15.Array4.0.2.2.tar.bz2

mkdir -v binutils-build

cdbinutils-build

../binutils-2.15.Array4.0.2.2/configure --prefix=/tools --disable-nls\

--enable-shared --with-lib-path=/tools/lib

make

make install

make -C ld clean

make -C ld LIB_PATH=/usr/lib:/lib

cd ..

注意:这里不要删除binutils-build,因为到制作目标系统的时候需要用到它。Gawk-3.1.4

代码:

tarxvf /lfs-sources/gawk-3.1.4.tar.bz2

cd gawk-3.1.4

./configure --prefix=/tools

make

make install

cd ..

rm -rf gawk-3.1.4

Coreutils-5.2.1

代码:

tarxvf /lfs-sources/coreutils-5.2.1.tar.bz2

cd coreutils-5.2.1

DEFAULT_POSIX2_VERSION=1ArrayArray20Array ./configure --prefix=/tools make

make install

cd ..

rm -rf coreutils-5.2.1

Bzip2-1.0.3

代码:

tarxvf /lfs-sources/bzip2-1.0.3.tar.bz2

cd bzip2-1.0.3

make

make PREFIX=/tools install

cd ..

rm -rf bzip2-1.0.3

Gzip-1.3.5

代码:

tarxvf /lfs-sources/gzip-1.3.5.tar.bz2

cd gzip-1.3.5

./configure --prefix=/tools

make

make install

cd ..

rm -rf gzip-1.3.5

Diffutils-2.8.1

代码:

tarxvf /lfs-sources/diffutils-2.8.1.tar.bz2

cd diffutils-2.8.1

./configure --prefix=/tools

make

make install

cd ..

rm -rf diffutils-2.8.1

Findutils-4.2.23

代码:

tarxvf /lfs-sources/findutils-4.2.23.tar.bz2

cd findutils-4.2.23

./configure --prefix=/tools

make

make install

cd ..

rm -rf findutils-4.2.23

Make-3.80

代码:

tarxvf /lfs-sources/make-3.80.tar.bz2

cd make-3.80

./configure --prefix=/tools

make

make install

cd ..

rm -rf make-3.80

Grep-2.5.1a

代码:

tarxvf /lfs-sources/grep-2.5.1a.tar.bz2

cd grep-2.5.1a

./configure --prefix=/tools --disable-perl-regexp make

make install

cd ..

rm -rf grep-2.5.1a

Sed-4.1.4

代码:

tarxvf /lfs-sources/sed-4.1.4.tar.bz2

cd sed-4.1.4

./configure --prefix=/tools

make

make install

cd ..

rm -rf sed-4.1.4

Gettext-0.14.3

代码:

tarxvf /lfs-sources/gettext-0.14.3.tar.bz2

cd gettext-0.14.3

./configure --prefix=/tools --disable-libasprintf --without-csharp

make

make install

cd ..

rm -rf gettext-0.14.3

Ncurses-5.4

代码:

tarxvf /lfs-sources/ncurses-5.4.tar.bz2

cd ncurses-5.4

./configure --prefix=/tools --with-shared --without-debug --without-ada --enable-overwrite make

make install

cd ..

rm -rf ncurses-5.4

Patch-2.5.4

代码:

tarxvf /lfs-sources/patch-2.5.4.tar.bz2

cd patch-2.5.4

CPPFLAGS=-D_GNU_SOURCE ./configure --prefix=/tools

make

make install

cd ..

rm -rf patch-2.5.4

Tar-1.15.1

代码:

tarxvf /lfs-sources/tar-1.15.1.tar.bz2

cd tar-1.15.1

./configure --prefix=/tools

make

make install

cd ..

rm -rf tar-1.15.1

Texinfo-4.8

代码:

tarxvf /lfs-sources/texinfo-4.8.tar.bz2

cd texinfo-4.8

./configure --prefix=/tools

make

make install

cd ..

rm -rf texinfo-4.8

Bash-3.0

代码:

tarxvf /lfs-sources/bash-3.0.tar.bz2

cd bash-3.0

patch -Np1 -i /lfs-sources/bash-3.0-avoid_WCONTINUED-1.patch ./configure --prefix=/tools --without-bash-malloc

make

make install

ln -vs bash /tools/bin/sh

cd ..

rm -rf bash-3.0

M4-1.4.3

代码:

tarxvf /lfs-sources/m4-1.4.3.tar.bz2

cd m4-1.4.3

./configure --prefix=/tools

make

make install

cd ..

rm -rf m4-1.4.3

Bison-2.0

代码:

tarxvf /lfs-sources/bison-2.0.tar.bz2

cd bison-2.0

./configure --prefix=/tools

make

make install

cd ..

rm -rf bison-2.0

Flex-2.5.31

代码:

tarxvf /lfs-sources/flex-2.5.31.tar.bz2

cd flex-2.5.31

patch -Np1 -i /lfs-sources/flex-2.5.31-debian_fixes-3.patch touch doc/flex.1

./configure --prefix=/tools

make

make install

cd ..

rm -rf flex-2.5.31

Util-linux-2.12q

代码:

tarxvf /lfs-sources/util-linux-2.12q.tar.bz2

cd util-linux-2.12q

sed -i ’s@/usr/include@/tools/include@g’ configure

./configure

make -C lib

make -C mount mountumount

make -C text-utils more

cp mount/{,u}mount text-utils/more /tools/bin

cd ..

rm -rf util-linux-2.12q

知识点:util-linux-2.12q这个版本如果在GCC4下编译需要打补丁,否则虽然能编译通过,但其中的cfdisk程序会有问题,目前已经有util-linux-2.12r这个版本已经修正了这个问题,建议使用。

Perl-5.8.7

代码:

tarxvf /lfs-sources/perl-5.8.7.tar.bz2

cd perl-5.8.7

patch -Np1 -i /lfs-sources/perl-5.8.7-libc-1.patch

./configure.gnu --prefix=/tools -Dstatic_ext=’IO Fcntl POSIX’

makeperl utilities

cp -v perl pod/pod2man /tools/bin

mkdir -pv /tools/lib/perl5/5.8.7

cp -Rv lib/* /tools/lib/perl5/5.8.7

cd ..

rm -rf perl-5.8.7

Stripping

这步是可有可无的,如果你打算今后还要用/tools里面的东西,那么可以strip一下来减少占用的磁盘空间,但如果做完目标系统后就删除了,Strip就可有可无了,反正最后也是要删掉的。

代码:

strip --strip-debug /tools/lib/*

strip --strip-unneeded /tools/{,s}bin/*

info和man里面的内容在制作过程中没什么用处,所以删掉也没啥关系。

rm -rf /tools/{info,man}

退出lfs用户(这步不要少了)

代码:exit

到目前为止,工具链已经制作完成了,接着就要开始制作真正的目标系统了,如果你到目前为止没出什么问题,那么恭喜你成功的通过了一关,不过接着还有相当长的路。

现在你应该是处于root用户状态的,看看你的命令行提示符是不是回到了#。

创建两个重要目录

代码:mkdir -pv $LFS/{proc,sys}

这个时候也许你想睡觉关机了,那么重新开机后回到工作状态的步骤是:

1.重新启动计算机,并从LiveCD启动

2.加载分区

export LFS=/mnt/lfs

mkdir -pv $LFS

mount /dev/sda2 $LFS

3.加载交换分区(如果不想用交换分区或者没有交换分区可跳过此步骤)

swapon /dev/sda1

相关知识点:

这时候已经制作好了工具链,因此可以不需要建立根目录下的tools链接了。

利用主系统加载几个重要的文件系统

代码:

mount -vtprocproc $LFS/proc

mount -vtsysfssysfs $LFS/sysLFS手册里下面这三条命令不执行也行,因为目录并没有准备好。代码:

mount -vfttmpfstmpfs $LFS/dev

mount -vfttmpfstmpfs $LFS/dev/shm

mount -vftdevpts -o gid=4,mode=620 devpts $LFS/dev/pts相关知识点:

mount命令加载的分区在重新启动后就失效了,所以在这其中重新启动则需要重新加载。这里为了方便使用源码包,我将光盘加载到目标系统里

mkdir $LFS/cdrom

mount /dev/cdrom $LFS/cdrom

这个步骤不是必须的,如果你想使用,那么在重新启动后进入工作状态的步骤中在相应的位置上加入。

这里有一个更简单的办法,将lfs-sources里面所有源码包复制到$LFS/sources目录中。

代码:

cp -a /lfs-sources/* $LFS/sources

Chroot到目标系统的目录下,以便不受主系统的影响来制作目标系统

代码:

chroot "$LFS" /tools/bin/env -i \

HOME=/root TERM="$TERM" PS1=’\u:\w\$ ’\

PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin \

/tools/bin/bash --login +h

这个时候如果你关机或重新启动,那么重新开机后回到工作状态的步骤是:

1.重新启动计算机,并从LiveCD启动

2.加载分区

export LFS=/mnt/lfs

mkdir -pv $LFS

mount /dev/sda2 $LFS

3.加载交换分区(如果不想用交换分区或者没有交换分区可跳过此步骤)

swapon /dev/sda1

4.加载必要的文件系统

mount -vtprocproc $LFS/proc

mount -vtsysfssysfs $LFS/sys

5.Chroot到目标系统下

chroot "$LFS" /tools/bin/env -i \

HOME=/root TERM="$TERM" PS1=’\u:\w\$ ’\

PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin \

/tools/bin/bash --login +h

因为之前都是用lfs用户制作的工具链,所以现在要将工具链下的所有文件转换成root 用户的文件,但因为现在目标系统下还没有任何用户,因此用0来表示root用户。

代码:chown -R 0:0 /tools

建立目标系统的目录结构

代码:

install -dv /{bin,boot,dev,etc/opt,home,lib,mnt}

install -dv /{sbin,srv,usr/local,var,opt}

install -dv /root -m 0750

install -dv /tmp /var/tmp -m 1777

install -dv /media/{floppy,cdrom}

install -dv /usr/{bin,include,lib,sbin,share,src}

ln -sv share/{man,doc,info} /usr

install -dv /usr/share/{doc,info,locale,man}

install -dv /usr/share/{misc,terminfo,zoneinfo}

install -dv /usr/share/man/man{1,2,3,4,5,6,7,8}

install -dv /usr/local/{bin,etc,include,lib,sbin,share,src}

ln -sv share/{man,doc,info} /usr/local

install -dv /usr/local/share/{doc,info,locale,man}

install -dv /usr/local/share/{misc,terminfo,zoneinfo}

install -dv /usr/local/share/man/man{1,2,3,4,5,6,7,8}

install -dv /var/{lock,log,mail,run,spool}

install -dv /var/{opt,cache,lib/{misc,locate},local}

install -dv /opt/{bin,doc,include,info}

install -dv /opt/{lib,man/man{1,2,3,4,5,6,7,8}}

创建几个必要的链接,因为在目标系统的编译过程中,部分编译程序会用绝对路径来寻找命令或文件。

代码:

ln -sv /tools/bin/{bash,cat,pwd,stty} /bin

ln -sv /tools/bin/perl /usr/bin

ln -sv /tools/lib/libgcc_s.so{,.1} /usr/lib

ln -sv bash /bin/sh

创建root用户和必要的组

代码:

cat> /etc/passwd /etc/group

重新加载bash,以使root用户起效,这样前面的提示符就不会是“I have no name!”

代码:

exec /tools/bin/bash --login +h

创建和设置几个临时文件和日志文件。

代码:

touch /var/run/utmp /var/log/{btmp,lastlog,wtmp}

chgrp -v utmp /var/run/utmp /var/log/lastlog

chmod -v 664 /var/run/utmp /var/log/lastlog

创建几个建立目标系统所必须的设备文件

代码:

mknod -m 600 /dev/console c 5 1

mknod -m 666 /dev/null c 1 3

加载临时文件系统到/dev目录下,并建立目标系统所必须的设备文件

代码:

mount -nvttmpfs none /dev

mknod -m 622 /dev/console c 5 1

mknod -m 666 /dev/null c 1 3

mknod -m 666 /dev/zero c 1 5

mknod -m 666 /dev/ptmx c 5 2

mknod -m 666 /dev/tty c 5 0

mknod -m 444 /dev/random c 1 8

mknod -m 444 /dev/urandom c 1 Array

chown -v root:tty /dev/{console,ptmx,tty}

ln -sv /proc/self/fd /dev/fd

ln -sv /proc/self/fd/0 /dev/stdin

ln -sv /proc/self/fd/1 /dev/stdout

ln -sv /proc/self/fd/2 /dev/stderr

ln -sv /proc/kcore /dev/core

mkdir -v /dev/pts

mkdir -v /dev/shm

mount -vtdevpts -o gid=4,mode=620 none /dev/pts

mount -vttmpfs none /dev/shm

到目前为止,创建目标系统的准备工作以基本完成,下面就要开始目标系统的软件包安装了。首先进入到源码目录下。

代码:

cd /sources(此前已经将LFS需要的源码包加载到了/cdrom下,因此后面的命令将从/cdrom/lfs-sources目录下解出,如果你将源码包直接复制到了sources目录下或别的什么目录下,则要相应的修改下面的命令)

export LFS=/cdrom/lfs-sources

如果之前是将所有源码包复制到sources下的,则执行

代码:

export LFS=/sources

嵌入式Linux根文件系统制作

实训项目四-嵌入四Linux系统根文件系统制作一. 项目实施目的 了解 UP-CUP2440 型实验平台Linux 系统下根文件系统结构 掌握根文件系统的搭建过程 掌握busybox、mkcramfs等工具的使用方法 二. 项目主要任务 使用busybox生成文件系统中的命令部分,使用mkcramfs工具制作CRAMFS 格式的根文件系统。 分析根文件系统etc目录下重要配置文件的格式及语法,熟悉根文件系统的启动过程 三. 基本概念 1.文件系统基本概念 Linux的一个最重要特点就是它支持许多不同的文件系统。这使Linux非常灵活,能够与许多其他的操作系统共存。Linux支持的常见的文件系统有:JFS、ReiserFS、ext、ext2、ext3、ISO9660、XFS、Minx、MSDOS、UMSDOS、VFAT、NTFS、HPFS、NFS、SMB、SysV、PROC等。随着时间的推移, Linux支持的文件系统数还会增加。Linux是通过把系统支持的各种文件系统链接到一个单独的树形层次结构中,来实现对多文件系统的支持的。该树形层次结构把文件系统表示成一个整个的独立实体。无论什么类型的文件系统,都被装配到某个目录上,由被装配的文件系统的文件覆盖该目录原有的内容。该个目录被称为装配目录或装配点。在文件系统卸载时,装配目录中原有的文件才会显露出来。在Linux 文件系统中,文件用i节点来表示、目录只是包含有一组目录条目列表的简单文件,而设备可以通过特殊文件上的I/O 请求被访问。 2.常见的嵌入式文件系统 嵌入式Linux系统一般没有大容量的磁盘,多使用flash存储器,所以多采用基于Flash(NOR和NAND)的文件系统或者RAM内存的文件系统。 (1)Flash根据结构不同分为 NOR Flash和NAND Flash。基于flash的文件系统主要有: jffs2:RedHat基于jffs开发的文件系统。

Linux操作系统基础教程

Linux操作系统基础教程 清华大学信息学院计算机系 目录 前言 (2) 第一讲 Linux基础 (2) 一.什么是Linux? (2) 二.安装Linux的好处? (3) 三.如何得到Linux? (3) 四.如何得到Linux的最新消息? (3) 五.Linux操作系统上有什么应用? (4) 六.在那里可以找到讨论区? (5) 七.安装过程 (5) 第二讲 Linux基础进阶 (5) 一.Linux的文件系统结构 (6) 二. 文件类型 (7) 三.Linux基本操作命令 (8) 四.基本的系统管理命令 (14) 五.关於 Process 处理的指令 (16) 六. 关於字串处理的指令 (17) 七. 网路上查询状况的指令 (17) 八. 网路指令 (18) 九. 关於通讯用的指令 (21) 十. 编译器( Compiler ) (22) 十一. 有关列印的指令 (22) 第三讲 Linux下的网络服务,配置问题和常用工具 (24) 一.Linux下的网络服务 (24) 二.几种重要的配置文件 (26) 三.Linux下常用的工具软件 (28) 尾语 (31)

前言 Linux是在1991年发展起来的与UNIX兼容的操作系统,可以免费使用,它的源代码可以自由传播且可任人修改、充实、发展,开发者的初衷是要共同创造一个完美、理想并可以免费使用的操作系统。 我们并不能使同学们通过这次系列讲座成为一个UNIX类操作系统的高手,这次系列讲座的目的就是在同学们中间普及Linux基础知识,为今后我们更加接近的了解Linux做一个好的开端。 第一讲 Linux基础 在这一讲中,我们主要是了解一下Linux的概况,以及对Linux有一个初步的感性认识。 一.什么是Linux? Linux是一个以Intel系列CPU(CYRIX,AMD的CPU也可以)为硬件平台,完全免费的UNIX兼容系统,完全适用于个人的PC。它本身就是一个完整的32位的多用户多任务操作系统,因此不需要先安装DOS或其他的操作系统(MS Windows, OS2, MINIX..)就可以进行直接的安装。Linux的最早起源是在1991年10月5日由一位芬兰的大学生Linux Torvalds (Torvalds@kruuna.helsinki.fi)写了Linux核心程序的0.02版开始的,但其后的发展却几乎都是由互联网上的Linux社团(Linux Community)互通交流而完成的。Linux不属于任何一家公司或个人,任何人都可以免费取得甚至修改它的源代码(source code)。Linux上的大部分软件都是由GNU倡导发展起来的,所以软件通常都会在附着GNU Public License(GPL)的情况下被自由传播。GPL是一种可以使你免费获得自由软件的许可证,因此Linux使用者的使用活动基本不受限制(只要你不将它用于商业目的),而不必像使用微软产品是那样,

busybox详解制作根文件系统

详解制作根文件系统 单击,返回主页,查看更多内容 一、FHS(Filesystem Hierarchy Standard)标准介绍 当我们在linux下输入ls / 的时候,见到的目录结构以及这些目录下的内容都大同小异,这是因为所有的linux发行版在对根文件系统布局上都遵循FHS标准的建议规定。 该标准规定了根目录下各个子目录的名称及其存放的内容: 制作根文件系统就是要建立以上的目录,并在其中建立完整目录内容。其过程大体包括: ?编译/安装busybox,生成/bin、/sbin、/usr/bin、/usr/sbin目录 ?利用交叉编译工具链,构建/lib目录 ?手工构建/etc目录 ?手工构建最简化的/dev目录 ?创建其它空目录 ?配置系统自动生成/proc目录 ?利用udev构建完整的/dev目录 ?制作根文件系统的jffs2映像文件 下面就来详细介绍这个过程。 二、编译/安装busybox,生成/bin、/sbin、/usr/bin、/usr/sbin目录

这些目录下存储的主要是常用命令的二进制文件。如果要自己编写这几百个常用命令的源程序,my god,这简直是一个噩梦!好在我们有嵌入式Linux系统的瑞士军刀——busybox,事情就简单很多。 1、从https://www.doczj.com/doc/6115266218.html,/下载busybox-1.7.0.tar.bz2 2、tar xjvf busybox-1.7.0.tar.bz2解包 3、修改Makefile文件 175 ARCH ?= arm 176 CROSS_COMPILE ?= arm-linux- 4、make menuconfig配置busybox busybox配置主要分两部分。 第一部分是Busybox Settings,主要编译和安装busybox的一些选项。这里主要需要配置:

Linux Bash Shell快速入门 在线教程

BASH 的基本语法 最简单的例子——Hello World! 关于输入、输出和错误输出 BASH 中对变量的规定(与C 语言的异同) BASH 中的基本流程控制语法 函数的使用 2.1 最简单的例子——Hello World! 几乎所有的讲解编程的书给读者的第一个例子都是Hello World 程序,那么我们今天也就从这个例子出发,来逐步了解BASH。 用vi 编辑器编辑一个hello 文件如下: #!/bin/bash # This is a very simple example echo Hello World 这样最简单的一个BASH 程序就编写完了。这里有几个问题需要说明一下: 一,第一行的#! 是什么意思 二,第一行的/bin/bash 又是什么意思 三,第二行是注释吗 四,echo 语句 五,如何执行该程序 #! 是说明hello 这个文件的类型的,有点类似于Windows 系统下用不同文件后缀来表示不同文件类型的意思(但不相同)。Linux 系统根据"#!" 及该字串后面的信息确定该文件的类型,关于这一问题同学们回去以后可以通过"man magic"命令及/usr/share/magic 文件来了解这方面的更多内容。在BASH 中第一行的"#!" 及后面的"/bin/bash" 就表明该文件是一个BASH 程序,需要由/bin 目录下的bash 程序来解释执行。BASH 这个程序一般是存放在/bin 目录下,如果你的Linux 系统比较特别,bash 也有可能被存放在/sbin 、/usr/local/bin 、/usr/bin 、/usr/sbin 或/usr/local/sbin 这样的目录下;如果还找不到,你可以用"locate bash" "find / -name bash 2> /dev/null" 或"whereis bash" 这三个命令找出bash 所在的位置;如果仍然找不到,那你可能需要自己动手安装一个BASH 软件包了。 第二行的"# This is a ..." 就是BASH 程序的注释,在BASH 程序中从“#”号(注意:后面紧接着是“!”号的除外)开始到行尾的多有部分均被看作是程序的注释。的三行的echo 语句的功能是把echo 后面的字符串输出到标准输出中去。由于echo 后跟的是"Hello World" 这个字符串,因此"Hello World"这个字串就被显示在控制台终端的屏幕上了。需要注意的是BASH 中的绝大多数语句结尾处都没有分号。 如何执行该程序呢?有两种方法:一种是显式制定BASH 去执行:

实验四 ramdisk 根文件系统的制作

实验四ramdisk根文件系统的制作 一.实验目的 1.熟悉根文件系统组织结构; 2.定制、编译ramdisk根文件系统。 二.实验设备 1.硬件:EduKit-IV 嵌入式教学实验平台、Mini2410 核心子板、PC 机; 2.软件:Windows 2000/NT/XP、Ubuntu 8.04、其他嵌入式软件包。 三.实验内容 利用6.3 中的已经完成的文件系统,生成一个根文件系统镜像。 四.实验原理 ramdisk是内核初始化的时候用到的一个临时文件系统,是一个最小的linuxrootfs系统,它包含了除内核以外的所有linux系统在引导和管理时需要的工具,做为启动引导驱动,包含如下目录: bin,dev,etc,home,lib,mnt,proc,sbin,usr,var。还需要有一些基本的工具:sh,ls,cp,mv……(位于/bin 目录中);必要的配置文件:inittab,rc,fstab……位于(/etc目录种);必要的设备文件:/dev/tty*,/dev/console,/dev/men……(位于/dev目录中);sh,ls等工具必要的运行库:glibc。1.制作ramdisk根文件系统映像 1)单击菜单应用程序->附件->终端打开终端,设置环境变量: $ source /usr/local/src/EduKit-IV/Mini2410/set_env_linux.sh $ source /usr/crosstool/gcc-3.4.5-glibc-2.3.6/arm-linux/path.sh 2)执行命令切换到ramdisk实验目录下: $cd $SIMPLEDIR/6.4-ramdisk 3)运行脚本文件: $ sudosh ramdisk-install.sh shell 脚本命令说明: #!/bin/bash # # ramdisk-install.sh - Make ramdiskfilesystem. # # Copyright (C) 2002-2007

献给初学者:谈谈如何学习Linux操作系统

献给初学者:谈谈如何学习Linux操作系统 一、选择适合自己的linux发行版 谈到linux的发行版本,太多了,可能谁也不能给出一个准确的数字,但是 有一点是可以肯定的,linux正在变得越来越流行,面对这么多的Linux发行版,打算从其他系统转到linux系统来的初学者可能会感到困惑,即便是忠实的 Linux用户也没有时间和精力去挨个尝试,因此初学者在学习linux的之前,需 要有一个明确的方向,选择一个适合自己的系统开始学习linux至关重要!下面 我们就分类介绍。 1.1初学者入门首选-redhat系列 在学习redhat系列linux之前,首先要了解以下redhatlinux各个发行版本之 间的关系。 1.RedHatLinux RedHatLinux是redhat最早发行的个人版本的linux,其1.0版本于1994年11月3日发行。虽然其历史不及其它linux发行版本悠久,但比起很多的Linux 发行套件,RedHat的历史悠久得多。自从RedHat9.0版本发布后,RedHat公司就不再开发桌面版的Linux发行套件,RedHatLinux停止了开发,而将全部 力量集中在服务器版的开发上,也就是RedHatEnterpriseLinux版。2004年4 月30日,RedHat公司正式停止对RedHat9.0版本的支持,标志著RedHatLinux的正式完结。原本的桌面版RedHatLinux发行套件则与来自开源 社区的Fedora进行合并,成为FedoraCore发行版本。 目前RedHat分为两个系列:由RedHat公司提供收费技术支持和更新的RedHatEnterpriseLinux,以及由社区开发的免费的FedoraCore。 2.FedoraCore FedoraCore(缩写为FC)被红帽公司定位为新技术的实验场地,许多新的技 术都会在FC中检验,如果稳定的话红帽公司则会考虑加入RedHatEnterpriseLinux中。 FedoraCore1发布于2003年年末,而FC的定位便是桌面用户。FC提供了 最新的软件包,同时,它的版本更新周期也非常短,仅6个月。由于版本更新 频繁,性能和稳定性得不到保证,因此,一般在服务器上不推荐采用FedoraCore。 其实可以这么认为,Fedora就是RedHat发行RedHat企业版linux的一个 实验版本,以用户做测试,为RedHat企业版发布奠定基础。 3.RedHatEnterpriseLinux RedHatEnterpriseLinux(缩写为RHEL,RedHat的企业版)。RedHat现在主要做服务器版的linux开发,在版本上注重了性能和稳定性以及对硬件的支持。由于企业版操作系统的开发周期较长,注重性能、稳定性和服务端软件支持, 因此版本更新相对较缓慢。

linux_vi基础教程

The binary system

Linux_vi 1 简介 (4) 2 使用帮助 (4) 3 模式和命令 (4) 3.1 输入模式和命令模式 (4) 3.2 vi和ex命令 (5) 4 启动与编辑vi-vim (5) 4.1编辑一个文件 (5) 4.2编辑多个文件 (5) 5 系统意外时数据的恢复 (5) 6 搜索 (6) 6.1搜索常用命令 (6) 6.2查找字符串便捷方式 (6) 6.3 查找整个字符串 (6) 7 移动和跳转 (6) 7.1获取光标当前位置 (6) 7.2 缓冲区移动 (7) 7.3 光标移动 (7) 7.4 行号跳转 (8) 7.5 跳转到前一位置 (9) 7.6 使用名称标示任意行,进行跳转 (9) 8 插入 (9) 9 写入与退出 (10) 9.1 写入文件 (10) 9.2 退出文件、停止vi (10) 10 文本改动 (10) 10.1替换之vi命令 (10) 10.2替换之ex命令_常用方法 (10) 11 删除 (11) 11.1 删除命令 (11)

11.2 常用的删除组合命令 (12) 11.3 撤销或重复改变 (12) 11.4 恢复删除 (12) 11.5 复制上一次删除 (12) 12 复制 (13) 12.1 接出(复制单词、句子、段落) (13) 12.2 复制与移动行 (13) 13 使用缩写 (14) 14 shell命令 (14) 14.1 执行shell命令 (14) 14.2 使用shell命令处理数据 (14) 15 显示与设置选项 (14) 15.1 显示选项 (14) 15.2 设置选项 (15) 15.3常用设置命令 (15) 16 初始化文件与配置文件 (15) 16.1初始化文件 (15) 16.2配置文件 (15) 17 vi术语 (15) 18 在线资料 (16)

实验八 构建根文件系统

实验八构建根文件系统 一、实验目的 1、了解嵌入式Linux文件系统的作用和类型; 2、了解jffs2文件系统的优点和在嵌入式系统中的应用; 3、理解文件系统的挂载过程; 4、使用BusyBox制作一个根文件系统。 二、实验环境 预装redhat9.0(内核版本2.4.x)的pc机一台,XScale嵌入式实验箱一台(已构建嵌入式Linux系统),以太网线一根,交叉编译工具链,BusyBox软件包。 三、实验步骤 1、解压BusyBox软件包; 2、使用make menuconfig来配置BusyBox,修改交叉编译器前缀; Build Option [*] Build BusyBox as a static binary(no shared library) [*]Do you want to build BusyBox with a Cross ompile /usr/local/hybus-linux-R1.1/bin/arm-linux- Installation Option [*]Don't’t use /use Coreutils [*]ls

[*]cp [*]reboot [*]echo [*]mkdir [*]rm Editors [*]vi Login Utilities [*]getty 3、交叉编译BusyBox; make make install 4、建立BusyBox顶层目录结构 mkdir etc dev proc tmp lib var sys 5、在dev目录下创建必要的设备节点 (ram0,console,null,zero); mknod mdblock b 31 3 mknod console c 5 1 mknod null c 1 3 mknod zero c 1 5 cp –dpR /dev /_install/dev (假设busybox的安装目录为/_install)

基于busybox的根文件系统制作

龙源期刊网 https://www.doczj.com/doc/6115266218.html, 基于busybox的根文件系统制作 作者:李飞,武金虎,石颖博 来源:《电脑知识与技术》2010年第17期 摘要:Busybox是构建嵌入式Linux文件系统的必备软件,它是所有文件和设备节点的起始点,是决定系统能否正常启动的关键。通过busybox-1.1.3为例,进行配置、编译、安装等过程,从而形成简单的根文件系统映像文件,为以后嵌入式Linux系统的移植打下了良好的开端。 关键词:Busybox;嵌入式Linux;Linux操作系统;根文件系统;cramfs 文件系统 中国分类号:TP316.81文献标识码:A文章编号:1009-3044(2010)17-4655-02 Making Root File System Based on Busybox LI Fei, WU Jin-hu, SHI Ying-bo (College of Computer Science and Information, Guizhou University, Guiyang 550025, China) Abstract: Busybox is an essentiaL software to buiLd an embedded Linux fiLe system. It is the starting node point of aLL the fiLes and devices and the key whether the system can have a normaL start. Taking busybox-1.1.3 for exampLe, making a simpLe root image system fiLe by configuration compiLation and instaLLation Lays a good foundation for migration of the embedded Linux system. Key words: busybox; embedded linux; Linux OS; root file system; cramfs file system 1 根文件系统结构 根文件系统是所有文件和设备节点的起始点,包括系统所必须的各种工具软件、库文件、 脚本、配置文件等一系列的文件。一个基本的Linux根文件系统包含有以下的目录:dev、proc、bin、etc、usr、Lib、temp、var、usr等等目录。其中dev是设备文件节点目录,proc是挂载proc文件系统所用的目录,bin目录下面包含了系统的基本命令,etc目录是系统启动脚本所在的目录,Lib是系统默认的动态链接库目录,usr是用户目录,temp是临时目录,用来保存临时文 件,var目录包含系统运行时要改变的数据。以上都是根文件系统所必须的目录 2 Busybox简介 熟练嵌入式Linux的朋友对busybox一定不会陌生,它是标准Linux工具的一个单个可执行实现,被形象的称为嵌入式Linux系统中的“瑞士军刀”,因为它将许多常用的UNIX工具和命令 结合到一个单独的可执行程序中。虽然busybox中的这些工具相对于GNU常用工具功能有所

嵌入式 linux 根文件系统 rootfs

一、什么是文件系统(Filesystem) 文件系统是包括在一个磁盘(包括光盘、软盘、闪盘及其它存储设备)或分区的目录结构;一个可应用的磁盘设备可以包含一个或多个文件系统;如果您想进入一个文件系统,首先您要做的是挂载(mount)文件系统;为了挂载(mount)文件系统,您必须指定一个挂载点。 二、主要嵌入式采用的文件系统 * Linux 中,rootfs是必不可少的。PC 上主要实现有ramdisk和直接挂载HD(Harddisk,硬盘) 上的根文件系统;嵌入式中一般不从HD 启动,而是从Flash 启动,最简单的方法是将rootfs load 到RAM 的RAMDisk,稍复杂的就是直接从Flash 读取的Cramfs,更复杂的是在Flash 上分区,并构建JFFS2 等文件系统。 * RAMDisk将制作好的rootfs压缩后写入Flash,启动的时候由Bootloader load 到RAM,解压缩,然后挂载到/。这种方法操作简单,但是在RAM 中的文件系统不是压缩的,因此需要占用许多嵌入式系统中稀有资源RAM。 ramdisk就是用内存空间来模拟出硬盘分区,ramdisk通常使用磁盘文件系统的压缩存放在flash中,在系统初始化时,解压缩到SDRAM并挂载根文件系统, 在linux系统中,ramdisk有二种,一种就是可以格式化并加载,在linux内核2.0/2.2就已经支持,其不足之处是大小固定;另一种是2.4的内核才支持,通过,ramfs来实现,他不能被格式化,但用起来方便,其大小随所需要的空间增加或减少,是目前linux常用的ramdisk技术. * initrd是RAMDisk的格式,kernel 2.4 之前都是image-initrd,Kernel 2.5 引入了cpio-initrd,大大简化了Linux 的启动过程,附合Linux 的基本哲学:Keep it simple, stupid(KISS). 不过cpio-initrd作为新的格式,还没有经过广泛测试,嵌入式Linux 中主要采用的还是image-initrd。 * Cramfs是Linus 写的很简单的文件系统,有很好的压缩绿,也可以直接从Flash 上运行,不须load 到RAM 中,因此节约了RAM。但是Cramfs是只读的,对于需要运行时修改的目录(如:/etc, /var, /tmp)多有不便,因此,一般将这些目录做成ramfs等可写的fs。 * SquashFS是对Cramfs的增强。突破了Cramfs的一些限制,在Flash 和RAM 的使用量方面也具有优势。不过,据开发者介绍,在性能上可能不如Cramfs。这也是一种新方法,在嵌入式系统采用之前,需要经过更多的测试 三、建一个包含所有文件的目录 1。建一个目录rootfs用来装文件系统 2。mkdir bin devetc lib procsbintmpusrvar 3. ln -fs bin/busyboxlinuxrc(使用busybox)

在硬盘上制作根文件系统.doc

在硬盘上制作根文件系统 一、实验目标: 在硬盘上建立一个根文件系统,硬盘镜像文件的名称为:hdc-0.11.new.img 二、实验环境: 1、Vmware workation, bochs虚拟机,ultraedit编辑环境 2、用到的四个重要的镜像文件:bootimage-0.11-hd,hdc-0.1.img,并将他们放到 mylinux0.11文件夹中。 3、实验环境:redhat linux 三、实验理论依据: 1、Linux引导启动时,默认使用的文件系统是根文件系统。其中一般都包括以下一些子目录和文件: etc/ 目录主要含有一些系统配置文件; dev/ 含有设备特殊文件,用于使用文件操作语句操作设备; bin/ 存放系统执行程序。例如sh、mkfs、fdisk等; usr/ 存放库函数、手册和其它一些文件; usr/bin 存放用户常用的普通命令; var/ 用于存放系统运行时可变的数据或者是日志等信息。 存放文件系统的设备就是文件系统设备。Linux 0.11内核所支持的文件系统是MINIX 1.0文件系统。 2、inode 译成中文就是索引节点。每个存储设备或存储设备的分区(存储设备是硬 盘、软盘、U盘... ... )被格式化为文件系统后,应该有两部份,一部份是inode,另一部份是Block,Block是用来存储数据用的。而inode呢,就是用来存储这些数据的信息,这些信息包括文件大小、属主、归属的用户组、读写权限等。inode为每个文件进行信息索引,所以就有了inode的数值。操作系统根据指令,能通过inode 值最快的找到相对应的文件。每一个文件开头都是一个inode。 做个比喻,比如一本书,存储设备或分区就相当于这本书,Block相当于书中的每一页,inode 就相当于这本书前面的目录,一本书有很多的内容,如果想查找某部份的内容,我们可以先查目录,通过目录能最快的找到我们想要看的内容。

根文件系统制作

Linux根文件系统的制作 1. 根文件系统 文件系统是包括在一个磁盘(包括光盘、软盘、闪盘及其它存储设备)或分区的目录结构;一个可应用的磁盘设备可以包含一个或多个文件系统;如果您想进入一个文件系统,首先您要做的是挂载(mount)文件系统;为了挂载(mount)文件系统,您必须指定一个挂载点。 注:对于我们应用开发来说,购买开发板的时候,厂家会提供好现成的根文件系统和BootLoader等,如果需要,我们可以改变其中的命令而无需从头开始制作一个新的根文件系统。不过这儿的制作过程可以让我们更深一点理解Linux的文件系统。 2.主要的根文件系统 * Linux 中,rootfs 是必不可少的。PC 上主要实现有 ramdisk 和直接挂载 HD(Harddisk,硬盘)上的根文件系统;嵌入式中一般不从 HD 启动,而是从 Flash 启动,最简单的方法是 将 rootfs load 到 RAM 的 RAMDisk,稍复杂的就是直接从Flash 读取的 Cramfs,更复杂的是在 Flash 上分区,并构建 JFFS2 等文件系统。 * RAMDisk 将制作好的 rootfs 压缩后写入 Flash,启动的时候由 Bootloader load 到RAM,解压缩,然后挂载到 /。这种方法操作简单,但是在 RAM 中的文件系统不是压缩的,因此需要占用许多嵌入式系统中稀有资源 RAM。 ramdisk 就是用内存空间来模拟出硬盘分区,ramdisk通常使用磁盘文件系统的压缩存放在flash中,在系统初始化时,解压缩到SDRAM并挂载根文件系统, 在linux系统中,ramdisk 有二种,一种就是可以格式化并加载,在linux内核2.0/2.2就已经支持,其不足之处是大小固定;另一种是 2.4的内核才支持,通过,ramfs来实现,他不能被格式化,但用起来方便,其大小 随所需要的空间增加或减少,是目前linux常用的ramdisk技术. * initrd 是 RAMDisk 的格式,kernel 2.4 之前都是 image-initrd,Kernel 2.5 引入了 cpio-initrd,大大简化了 Linux 的启动过程,附合 Linux 的基本哲学:Keep it simple, stupid(KISS). 不过cpio-initrd 作为新的格式,还没有经过广泛测试,嵌入式 Linux 中主要采用的还是 image-initrd。 * Cramfs 是 Linus 写的很简单的文件系统,有很好的压缩绿,也可以直接从 Flash 上运行,不须 load 到 RAM 中,因此节约了 RAM。但是 Cramfs 是只读的,对于需要运行时修 改的目录(如: /etc, /var, /tmp)多有不便,因此,一般将这些目录做成ramfs 等可写的 fs。 * SquashFS 是对 Cramfs 的增强。突破了 Cramfs 的一些限制,在 Flash 和 RAM 的使用量方面也具有优势。不过,据开发者介绍,在性能上可能不如 Cramfs。这也是一种新方法,在嵌入式系统采用之前,需要经过更多的测试。 3.Ramdisk制作 RAMDisk的制作方法如下:

Linux入门教程(精华基础版)

第一章Linux入门教程 Linux,在今天的广大电脑爱好者心中已经不再是那个遥不可及的新东西了,如果说几年前的Linux是星星之火的话,如今Linux不仅在服务器领域的应用取得较大进展,而且在桌面应用领域也有越来越多的人选择使用。Linux的开放性和灵活性使它得以在实验室和其它研究机构中被用于创新性技术变革的前沿,现在Linux已经真正地向广大的电脑爱好者们敞开了大门。 只要你对Linux感兴趣,想要学习Linux,那么本教程将带你走进Linux的世界。 第一章初识Linux 在学习使用之前我们还是先来了解一下Linux吧。 Linux是什么?按照Linux开发者的说法,Linux是一个遵循POSIX(标准操作系统界面)标准的免费操作系统,具有BSD和SYSV的扩展特性(表明其在外表和性能上同常见的UNIX非常相象,但是所有系统核心代码已经全部被重新编写了)。它的版权所有者是芬兰籍的Linus B.Torvalds先生。 1991年8月这位来自芬兰赫尔辛基大学的年轻人Linus Benedict Torvalds,对外发布了一套全新的操作系统。 最开始的Linux版本是被放置到一个FTP服务器上供大家自由下载的,FTP服务器的管理员认为这是Linus的Minix,因而就建了一个Linux目录来存放这些文件,于是Linux这个名字就传开了,如今已经成了约定俗成的名称了。 下图就是Linux的吉祥物,一只可爱的小企鹅(起因是因为Linus是芬兰人,因而挑选企鹅作为吉祥物): Linux的吉祥物 闲话少叙进入正题。我们主要的学习方向有如下几点:

1.熟练掌握基本命令。每个系统都有自己特定的语言环境,Linux也不例外,只有熟悉并熟练掌握Linux的常用基础命令才可以深入学习。 2.系统管理及运用。系统的管理包括启动、用户、进程以及安全管理等等。大体上都是通过命令来进行配置文件及脚本文件的。 3.源码的学习和研究。由于内核的相似,Linux同UNIX一样都是由C语言开发而成的,所以了解UNIX的朋友学习起来相对容易。 4.内核开发。现在的很多服务器系统,网络设备,安全防护软件以及手机系统和掌上PDA 的操作管理系统都是由Linux编程开发而成的,所以内核的开发学习当然必不可少。 5.数据库及服务器领域。如今Linux做的服务器在市场中占有率第一的位置无可动摇,其中包括:WWW服务器,FTP服务器,mail服务器,数据库服务器等等多种服务器。 了解了学习的目的和方向后,下面以Red Hat9.0为例来介绍Linux的安装过程。 第一步:设置电脑的第一启动驱动器为光盘驱动器,插入Linux系统光盘启动计算机。 第二步:系统会自动进入到Linux安装初始画面,第一要选择安装的方式,其中如果要选择文本界面安装需要在引导命令处输入命令linux text,如果要选择图形界面安装的话直接安回车Enter。笔者使用的是图形安装。 第三步:选择完安装方式后便出现了光盘检测界面,出现这个对话框的意思就是在安装之前确定系统盘是否有损坏,如果确定没有损坏选择“Skip”直接跳过检测进入下个环节。如果选择“OK”则自动转到光盘检测程序自动检测光盘。对于初次接触Linux的朋友,还是建议您在安装之前先检测下系统安装光盘,省去在安装过程中所带来的不便。 第四步:检测完光盘后会出现Linux的软件介绍说明以及选择系统语言的对话框,选择“简体中文”,当然如果你精通别的语言也是可以选择其他语言进行安装和使用的。 第五步:键盘以及鼠标设置。在选项中提供了多种型号,品牌,接口和语言的键盘和鼠标,根据你现所用的键鼠进行对应选择。选择完毕后单击“下一步” 第六步:安装类型。其中包括“个人桌面”,“工作站”,“服务器”,“定制”。四种类型名称不同,内容大同小异。由于篇幅所限这个会在日后的讲座中给大家详细介绍。 第七步:磁盘分区设置。其中包括两个选项,“自动”和“手动”。自动分区会将所有的整个硬盘按照容量大小平均分区格式化,适合没有装任何资料的新电脑,但如果你在这之前装有其他系统,或是其他分区中存在的数据的话,建议您还是“手动分区”,这样不会丢失您原来的文件数据。 第八步:新建分区。在图形界面下比较直观,一般都会显示出你硬盘的容量,厂商等相关信息。直接点击“新建”来创建新的分区。

定制最简linux和根文件系统(平台龙芯1B开发板)共13页word资料

版本历史 版本时间备注 V1.0 2013-08-28 创建 1. 前言 (2) 1.1. 开发板版本号 (2) 1.2. 工具链版本号 (2) 1.3. 参考文档及其版本号 (3) 1.4. 目标 (3) 2. 搭建开发环境 (3) 3. 制作根文件系统 (3) 3.1. 配置 (3) 3.1.1. 拷贝源码,并解压 (3) 3.1.2. 配置选项简述 (4) 3.2. 编译 (4) 3.3. 构建根文件系统 (5) 3.3.1. 建立系统根目录 (5) 3.3.2. 建立设备文件 (5) 3.3.3. 建立系统配置文件 (5) 4. 编译linux (7) 4.1. 配置 (8) 4.1.1. 首先拷贝源码,并解压 (8) 4.1.2. 不安装Ncurses (8) 4.1.3. 没有拷贝.config (8) 4.1.4. 不用修改Makefile (8) 4.1.5. 配置选项简述 (9) 4.2. 编译 (10) 5. 启动运行linux (11) 5.1. 拷贝vmlinux到tftp服务器目录下 (11) 5.2. 设置PMON的ip地址 (11) 5.3. 下载内核 (12) 5.4. 启动linux (12)

1.前言 很高心拿到了龙芯1B开发板。然后仔细的看了开发板光盘里的《1B开发板用户手册.pdf》。里面写得非常详细,并且都附有截图,很明了。从最开始装虚拟机到编译linux,制作根文件系统等等,连虚拟机软件和Ubuntu系统镜像都有。可以说这套开发板考虑得非常周到。 然后我就参照《1B开发板用户手册.pdf》编译了linux,制作了根文件系统,最后终于跑起来,进入了shell。 这里谈谈我的感想 ●用户手册更像一个工具书 就拿根文件系统来说吧。Cramfs,Jffs2,Yaffs2的制作步骤都有,这表示该手册很全面,但是如果是一个初学者的话,给的选择太多不一定是好事。这也是我想写这篇文档的原因。我想linux的配置尽量简单(除了串口驱动以外,其它的比如,网卡,声卡,触屏等都暂时不需要),根文件系统也尽量简单(手册中的已经很简单了,后面我们就参照手册),另外为了再简单一点我把根文件系统也选择内存文件系统,内核只下载到内存而不烧写到flash,同时PMON参数也不修改。这样做有个好处——任何时候我可以复位进入开发板预装的linux 和文件系统。这便于在我们遇到问题时参考。 ●制作根文件系统的章节还有点小小的问题需要改进 ?手册中的笔误Busybox配置过程中ionice错写为inoice ?没有新建目录/root和/var/log ?没有新建console和串口设备节点ttyS2 另外,说点题外话,回想以前读大学时,非常想学习嵌入式,但是感觉非常困难。现在看来,当时感觉困难的原因是入门太难了。为什么入门难,弄了很久连环境都没打起来,更别说编译linux,制作根文件系统了。 在这里我想说“朋友们,搭建环境只需要把开发板的工具链解压到指定目录就可以了。就相当于windows上的绿色软件一样,仅此而已,这比安装vs2019快多了,方便多了”。 既然开发环境搭建起来了,后面就是配置编译linux,制作根文件系统了(先不要管PMON 了,就像电脑一样,很少有人换bios,最多重装系统)。这也就是本篇文章的任务。 1.1. 开发板版本号 LS1B DEMO BOARD Schematic Revision 2.0即版本为2.0 1.2. 工具链版本号 版本为gcc-3.4.6-2f.tar.gz

Ubuntu for Arm根文件系统制作

1.安装rootstock软件 rootstock是一个用来制作Ubuntu根文件系统的工具,可以使用apt-get install rootstock获取,也可以在官网直接下载:https://https://www.doczj.com/doc/6115266218.html,/project-rootstock 若选择前者:直接使用rootstock命令 若选择后者:解压下载文件rootstock-0.1.99.4.tar.gz得到rootstock可执行文件,可以将其拷贝到系统bin目录下 2.rootstock创建根文件系统 [html]view plaincopy 得到文件系统压缩文件qemu-armel-201408271515.tar.gz 创建一个空镜像: [html]view plaincopy 在镜像上创建文件系统: [html]view plaincopy 挂载镜像: [html]view plaincopy 将文件系统解压到挂载目录: [html]view plaincopy 这时可以修改挂载目录中的东西了: [html]view plaincopy 最后是得到最后的文件系统镜像: [html]view plaincopy

3.模拟器中运行根文件系统 下载模拟器qemu: [html]view plaincopy 在2中的“若干修改”中执行: [cpp]view plaincopy 在仿真环境中访问文件系统 [cpp]view plaincopy 此时在仿真环境下就可以安装SPICE了:[cpp]view plaincopy 安装完SPICE后保存文件系统: [cpp]view plaincopy

farsight 构建Linux根文件系统

构建Linux根文件系统 1. 根文件系统 1.1 定义 存放系统启动所必需的文件 内核映像文件(嵌入式系统中,内核一般单独存放在一个分区中); 内核启动后运行的第一个程序(init); shell程序; 应用程序所依赖的库; …... 1.2 目录结构 1.2.1 FHS标准: (Filesystem Hierarchy Standard,文件系统层次标准); 定义文件系统中目录、文件存放的原则,不是强制性标准。 1.2.2 目录: /bin 存放所有用户都可以使用的、基本的命令; 比须和根文件系统在一个分区中。 /sbin 存放系统命令,只有管理员可以使用的命令 必须和根文件系统在同一分区中。 /---/sbin *基本的系统命令,用于启动系统、修复系统等。 *---/usr/sbin *不是急迫需要使用的系统命令。 *---/usr/local/sbin /本地安装的系统命令。 /dev:存放设备文件。 /etc:存放配置文件。 /lib /---libc.so.*动态链接C库。 *---ld*链接器、加载器。 /---modules内核可加载模块存放的目录。 /home:用户目录。 /root:根用户目录。 /usr 存放共享、只读的数据和程序; 可以存放在另一个分区中,系统启动后再挂接到根文件系统的/usr目录下。 /var:存放可变的数据。 /proc proc文件系统的挂接点; proc文件系统是一个虚拟的文件系统,用来表示系统的运行状态。 /mnt:用于临时挂接某个文件系统的挂接点。 /tmp 用于存放临时文件; 为减少对Flash的操作,可以在/tmp目录上挂接内存文件系统。

-Linux操作系统基础教学大纲

Linux操作系统基础 Foundation of Linux Operation System 适用范围:2013本科人才培养方案 课程编号: 学分:2 学时:32(其中:讲课学时:20 实验学时:12) 先修课程:计算机文化概论 适用专业:网络工程 建议教材:《Linux实用教程》陈博等人民邮电出版社2008年10月 开课单位:软件学院 一、课程的性质与任务 课程性质:本课程是网络工程专业网络安全与攻防方向的一门专业方向任选课,Linux及应用是计算机科学专业的一门专业课程。 课程任务:本课程的目的和任务是使学生全面地了解和掌握Linux系统的基本概念、原理及应用技术、以及适应社会对Linux操作与管理人员的需求。通过本门课程的学习,能够为以后从事软件编程、分布式处理及系统服务部署等不同应用领域的研究打下深厚的理论基础。 二、课程的基本内容及要求 (一)认识Linux系统 1. 课程教学内容: (1)Linux系统简介 (2)Linux系统的特点和组成 (3)Linux版本介绍 (4)Fedora Core系统概述 2. 课程重点、难点 重点:了解Linux操作系统的发展历程,改系统的特点和组成。 难点:Linux操作系统与Window操作系统的异同。 3. 课程教学要求: (1)了解计算机计算机操作系统的发展过程; (2)理解Linux操作系统与UNIX系统的区别,理解GUN计划的内容; (3)掌握Linux各个系统的版本及其优劣等。

(二)Fedora 系统的安装和删除 1. 课程教学内容: (1)准备安装Linux操作系统 (2)分区的概念和分区的类型。 (3)硬盘的类型。 (4)安装Linux的步骤及安装后的初始化工作。 (5)删除MBR中GRUB引导程序。 (6)删除Linux分区。 2. 课程重点、难点 重点:如何对硬盘分区,如何命名分区,分区的格式化等。 难点:如何理解分区的编号及文件系统的建立等。 3. 课程教学要求: (1)本章的学习目的是使学生能够自己安装一个操作系统,合理分区,并了解Linux下分区的概念。了解如何建立交换分区。 (2)理解分区文件的命名描述; (3)掌握安装Linux的步骤及安装后的初始化工作,掌握如何删除MBR中的GRUB分区程序。 (三)Linux图形化界面 1. 课程教学内容: (1)登录、注销和关闭系统 (2)GNOME基本使用 (3)系统设置 (4)Fedora系统的应用软件使用 2. 课程重点、难点: 重点:掌握如何正常登录、注销和关闭系统的几个命令。 难点:了解在如何在GNOME图形界面中如何复制、黏贴、删除文件等。 3. 课程教学要求: (1)了解GNOME的初步使用,系统的各种基本设置; (2)理解硬盘分析器、系统日志等内容。 (3)掌握在GNOME的操作使用。 (四)Linux字符界面操作 1. 课程教学内容:

相关主题
文本预览
相关文档 最新文档