开了一个交流群,欢迎爱好者和开发者一起交流,转载请注明出处。

QQ群:519230208,为避免广告骚扰,申请时请注明 “开发者” 字样

========================================================

占盘大户一目了然

# du -sh                                   // 查看当前目录大小

root@imx6ulevk:/# du -sh                   // 总共原始大小
616M root@imx6ulevk:/opt# du -sh
170M . root@imx6ulevk:/usr# du -sh
337M . root@imx6ulevk:/boot# ls
vmlinux-3.14.-6UL_ga+ge4944a5 zImage zImage-3.14.-6UL_ga+ge4944a5
root@imx6ulevk:/boot# du -sh
21M . root@imx6ulevk:/var# ls
backups cache lib local lock log run spool tmp volatile
root@imx6ulevk:/var# du -sh
23M . root@imx6ulevk:/unit_tests# du -sh
44M .

我编译的是 fsl-image-gui,用以下方式找到bb文件

find -name "*fsl-image-gui*.bb"
./sources/meta-fsl-bsp-release/imx/meta-sdk/recipes-fsl/images/fsl-image-gui.bb

打开bb文件,找到一下内容,并尝试删减

IMAGE_INSTALL += " \
${X11_IMAGE_INSTALL} \
${X11_IMAGE_INSTALL_GRAPHICS} \
${DFB_IMAGE_INSTALL} \
${WAYLAND_IMAGE_INSTALL} \
${MM_IMAGE_INSTALL} \
packagegroup-fsl-tools-bluetooth \
packagegroup-fsl-tools-gpu \
packagegroup-fsl-tools-gpu-external \
packagegroup-fsl-tools-testapps \
packagegroup-fsl-tools-benchmark \
"
export IMAGE_BASENAME = "fsl-image-gui" Change to ========>> IMAGE_INSTALL += " \
packagegroup-fsl-tools-bluetooth \
"
export IMAGE_BASENAME = "fsl-image-gui"

少了200M多

-rw-r--r-- 1 xuerui xuerui 844M 12月 30 12:27 fsl-image-gui-imx6ulevk-20151230030257.rootfs.sdcard
-rw-r--r-- 1 xuerui xuerui 624M 1月 25 15:55 fsl-image-gui-imx6ulevk-20160125075030.rootfs.sdcard

以下内容来源于百度文库,没注明出处,侵权请告知

一、编译内核
得到bzImage
二、定制文件系统
、创建ramdisk虚拟空间,用来放置文件系统
命令 # mke2fs –m –I /dev/ram0
注释:mke2fs将会自动判断设备容量的大小并相应的配置自身,-m 0参数防止它给root保留空间,这样会腾出更多有用的空间。
、挂载刚才创建的虚拟盘,我这里挂载在/mnt/floppy目录下
命令 # mount –t ext2 /dev/ram0 /mnt/floppy
、创建文件系统必须目录
命令 # cd /mnt/floppy
# mkdir dev proc etc bin sbin lib mnt usr
、确定/dev目录下我们需要的设备文件
方案一、把现有/dev目录中所有设备文件拷贝过来,然后删除不必要的设备文件(不推荐使用)
命令:# cp –dpR /dev /mnt/floppy/dev
注释:该命令会拷贝整个设备目录但不拷贝文件内容,同时dpR开关保证连接文件仍然不变,不会拷贝连接指向原来文件,而且属性不变。如果没有SCSI设备,删除所有以sd开头的设备文件,如果不使用串口设备,删除所有以cua开头的文件,然后保留一些必要的设备文件。
方案二、只拷贝必要的设备文件:
console —— 控制台设备
tty* —— 由控制台管理的虚拟终端
ram —— 虚拟内存盘设备(以后我们的系统将运行在虚拟盘中)
null —— 空设备,非常有用的字符设备文件,送入这个设备的所有东西将被忽略。如果将任何程序的输出结果重定向到/dev/null,则看不到任何输出信息,因此脚本中常用它来消除本该显示在屏幕上的其他信息
zero —— 零设备,只会得到空的内容,有时为了提高压缩率,需要对某空间全零填充时需要使用该设备
inintrd —— 特殊的字符设备,被用来从用户空间向系统内核发送切换运行级别的信息,属于一个虚拟字符设备。
fd —— 软盘设备
hd —— 硬盘设备(该项不是必须,如果您想挂载硬盘,请选择该项)
命令:# cp –dpR /dev/console /mnt/floppy/dev
# cp –dpR /dev/tty* /mnt/floppy/dev
# cp –dpR /dev/ram /mnt/floppy/dev
注释:如果要使用多个虚拟盘,可以相应的将ram1,ram2,……等拷贝过来
# cp –dpR /dev/null /mnt/floppy/dev
# cp –dpR /dev/zero /mnt/floppy/dev
# cp –dpR /dev/initrd /mnt/floppy/dev
、 确定/etc目录中所需要的系统配置文件
a) rc.d/* —— 系统启动所需要的脚本
b) fstab —— 列出要登陆的文件系统,
c) inittab —— 包含启动过程参数
先直接拷贝系统/etc目录下的以上配置文件
命令 # cp –R /dev/rc.d/* /mnt/floppy/dev/
# cp /dev/fstab /mnt/floppy/dev/
# cp /dev/inittab /mnt/floppy/dev/
然后修改启动配置脚本,用vi或者kwrite等文本编辑工具打开/dev/rc.d/rc文件
# cd /mnt/floppy/dev/rc.d/
# vi rc
修改rc文件为以下内容:
#!/bin/sh
bin/mount -av
/bin/host name fallso
修改fstab文件内容为以下内容:
/dev/ram0 / ext2 defaults
/dev/fd0 / ext2 defaults
/proc /prco proc defaults
修改inittab文件内容:
id:2:initdefault:
si::sysinit:/etc/rc
1:2345:respawn:/sbin/getty 9600 tty1
2:23:respawn:/sbin/getty 9600 tty2
7、 确定/bin是和/sbin目录包含的命令文件
a) ls ——文件目录陈列,相当于dos的dir
b) mv ——
c) cat ——
d) init ——
e) mingetty ——
f) login —— 登陆命令
g) mount —— 挂载设备命令
h) umount —— 卸载设备命令
命令:# cp /bin/ls /mnt/floppy/bin
# cp /bin/cat /mnt/floppy/bin
# cp /bin/mv /mnt/floppy/bin
# cp /bin/login /mnt/floppy/bin
# cp /bin/mount /mnt/floppy/bin
# cp /bin/umount /mnt/floppy/bin
# cp /sbin/init /mnt/floppy/bin
# cp /sbin/mingetty /mnt/floppy/bin
8、 确定/lib目录下所需要的共享函数库,如果缺少必要的函数库,系统会自动停止启动或出现一些错误信息提示。
a) 列出所有程序需要使用的libc库
命令:# cd /bin
# ls –l /lib/libc*
-rwxr-xr-x 1 root root 4016683 Apr 16 18:48 libc-2.1.1.so*
lrwxrwxrwx 1 root root 13 Apr 10 12:25 libc.so.6 -> libc-2.1.1.so*
拷贝箭头右边所指文件
如 cp –dpR /lib/libc-2.1.so* /mnt/floppy/lib
b)察看每一个程序所使用的函数库
命令:# ldd /sbin/mke2fs
libext2fs.so.2 => /lib/libext2fs.so.2 (0x40014000)
libcom_err.so.2 => /lib/libcom_err.so.2 (0x40026000)
libuuid.so.1 => /lib/libuuid.so.1 (0x40028000)
libc.so.6 => /lib/libc.so.6 (0x4002c000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
拷贝箭头右边的函数库
如cp –dpR/lib/ld-linux.so.2 /mnt/floppy/lib
9、 关于其他目录,以下目录在软盘版linux中完全可以为空
a) /proc是一个虚拟的文件系统,用来传输资料给核心程序的目录,可以观察这些特殊的文件在内存中运行的信息;
b) /usr目录下包含系统运行的所有程序,用户经常用到的一些数据和一些配置数据,该文件系统为只读,以减少系统瘫痪的危险性
c) /mnt 挂载其他设备的临时目录
10、卸载虚拟盘,拷贝、压缩文件系统
命令:# umount /mnt/floppy
# dd if=/dev/ram0 bs=1k |gzip –v9>roofs.gz
注释:压缩后在/root下得到一个压缩的根文件系统,检查它是否超过了1.44M,如果超过还得从头再来。 三、 引导程序
裁剪后所得内核大小为850KB,压缩后文件系统大小为1.2M,二者之和大于1.44M,显然超过了软盘容量,所以本软盘版linux采用两张软盘,第一张盘放置内核及启动引导程序,第二张盘放置压缩的文件系统。系统启动过程如下:
由于linux内核无法自己引导,故在系统启动时需要引导器来加载系统内核。通常的我们使用LILO,即the LInux LOader。
微机加电后,基于x86 CPU构架的特性,CPU将去检测执行地址为FFFF0处存储的跳转指令,跳转到较低的地址。接着BIOS就会做一系列的检查操作。这一过程即POST(Power On Self Test)。最后BIOS结束自检,接着读取第一个启动设备的启动信息。一般的是从硬盘启动,但本系统基于软盘,因此,BIOS将从软盘的启动扇区读取系统启动信息,这里即为LILO的引导部分内容,并将控制权交给LILO。
LILO接管系统后将完成信息的显示、操作系统的选择(对多系统共存而言,在这里直接运行软盘上的Linux)、内核启动参数的传递,然后加载/etc/lilo.conf中对应的内核映像文件,最后将控制权交给加载到系统中的内核映像。
当软盘上的Linux的内核被LILO加载到内存后,开始掌握控制权。由于Linux的内核是压缩存储的,所以首先进行的是自解压操作。然后内核将开始检测系统硬件,并配置相应的驱动程序,同时在系统控制台上输出相应结果信息。接下来内核将挂载并检测根文件系统。若挂载成功,内核将在系统后台启动系统的第一个进程init进程。至此,内核加载过程结束。
接下来由init进程根据/etc/inittab中的信息完成Linux系统的初始化操作。本系统裁剪掉了许多不必要的服务,故而只进行下列初始化操作。
init停止在console,按inittab指示打开一个shell或者开getty+login这样用户就可以看到输入用户名的提示符,至此进入系统操作,完成整个系统引导过程。
创建软盘版linux引导程序的步骤如下:
1、 在第一张软盘上标记:系统引导及内核,然后插入软驱,执行命令
a) # mke2fs –N 24 –m 0 /dev/fd0
注释:将软盘格式化为具有24个信息节点、ext2类型的文件系统
b) # mount –o dev /dev/fd0 /mnt
注释:挂载软盘到/mnt目录
c) # mkdir /mnt/boot
注释:创建启动盘的boot目录
d) # mkdri /mnt/dev
注释:创建启动盘的dev目录
e) # cp –R /dev/null /mnt/dev
注释:拷贝空设备到软盘
f) # cp –R /dev/fd0 /mnt/dev
注释:拷贝软盘设备到目标系统的/dev目录下
g) # cp /boot/boot.b /mnt/boot
注释:拷贝启动映像文件到目标系统/dev目录下
h) # cp /boot/bzImage /mnt/boot
注释:拷贝内核到目标系统的/boot目录下
i) # rdev –r /mnt/bzImage 49152li
2、 创建修改lilo.conf文件
a) # cp /etc/lilo.conf /mnt
b) 打开lilo.conf,修改为以下内容:
boot=/dev/fd0
install=/boot/boot.b
map=/boot/map
read-write
backup=/dev/null
compact
image=/bzImage
label=Linux
root=/dev/fd0
3、 将引导装入程序复制到软盘
命令:# lilo –v C lilo.conf –r /mnt
4、 卸载第一张软盘
命令:# umount /mnt
5、 将第二张软盘标记为:文件系统。插入软驱,拷贝压缩后的文件系统
a) # mke2fs –i8192 –m 0 /dev/fd0
注释:-i8192表示每8192位创建一个信息节点
b) # mount /dev/fd0 /mnt
注释:挂载软盘到/mnt目录
c) # cp /root/rootfs.gz /mnt
注释:拷贝文件系统到软盘
d) # umount /mnt
注释:卸载软盘
6、 重新启动电脑,进入bios设置“first boot device”为“boot from floppy disk”。测试软盘版linux系统是否能够运行。
将1号软盘插入软驱,重新启动电脑,看到屏幕上出现“lilo loading linux”,然后是一大堆的系统硬件初始化信息,引导内核后,最后看到以下提示VFS:Insert root floppy disk to be loaded into RAM disk an press ENTER
[见图一]
插入第二张软盘:装载文件系统
[见图二]
不知何故,我在插入第二张软盘后,看到如下提示:
RAMDISK:Ext2 filesystem found at block0
RAMDISK:Loading 1440 block[1disk]into ram disk done
VFS Mounted root(ext2 filesystem)
Freeing unused kernel memory:84K freed
Warining:unable to open an initial console
Kernel panic:No init found .Try passing init=option to kernel
7、 将软盘插在其他机器的软驱中,测试软盘版linux系统是否具有移植性。 呼~。。今天忙了一天,光裁剪根文件系统了。
一个1G多的文件系统,被我剪剪剪 ,成了30M了,但是还是嫌大,最理想是10M以内。
但是我真觉得没法再剪了。 bin/的东西,比较重要,只删了些不常见的命令、
lib/有很多gcc的库,也得小心删减,一裁了不该裁的,系统就起不来了。。
usr/东西特别多
usr/bin/,usr/lib/,可以删掉绝大部分,留下几个用到的就可以了
usr/share/里好多东西,删删删,使劲删,基本都删光了。
root/modules/里,很多需要加载的.ko模块,也可以删,只剩下core,sys,os的几个.ko。
var/里面也可以删很多东西,留下一个var/log/dmesg和var/run/utmp。
dev/里的东西也可以删,只要留下console和ttySA0就可以了。
etc/也可以删一些不重要的脚本。 就这样,只剩下了一个恐龙骨架~

Yocto开发笔记之《根文件系统裁剪》(QQ交流群:519230208)的更多相关文章

  1. 运维开发笔记整理-URL配置

    运维开发笔记整理-URL配置 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.URL路由 对于高质量的Web应用来说,使用简洁,优雅的URL的路由是一个非常值得重视的细节.Dja ...

  2. Yocto开发笔记之《快速入门,环境搭建 & 编译》(QQ交流群:519230208)

    开了一个交流群,欢迎爱好者和开发者一起交流,转载请注明出处. QQ群:,为避免广告骚扰,申请时请注明 “开发者” 字样 ======================================== ...

  3. Yocto开发笔记之《嵌入式linux libcurl编程》(QQ交流群:519230208)

    开了一个交流群,欢迎爱好者和开发者一起交流,转载请注明出处. QQ群:519230208,为避免广告骚扰,申请时请注明 “开发者” 字样 =============================== ...

  4. Yocto开发笔记之《Makefile编写》(QQ交流群:519230208)

    开了一个交流群,欢迎爱好者和开发者一起交流,转载请注明出处. QQ群:519230208,为避免广告骚扰,申请时请注明 “开发者” 字样 =============================== ...

  5. Yocto开发笔记之《驱动调试-GPS数据采集》(QQ交流群:519230208)

    开了一个交流群,欢迎爱好者和开发者一起交流,转载请注明出处. QQ群:519230208,为避免广告骚扰,申请时请注明 “开发者” 字样 =============================== ...

  6. Yocto开发笔记之《Tip-bitbake常用命令》(QQ交流群:519230208)

    开了一个交流群,欢迎爱好者和开发者一起交流,转载请注明出处. QQ群:519230208,为避免广告骚扰,申请时请注明 “开发者” 字样 =============================== ...

  7. [Openwrt 项目开发笔记]:MySQL配置(六)

    [Openwrt项目开发笔记]系列文章传送门:http://www.cnblogs.com/double-win/p/3888399.html 正文: 在本人的项目中,运行在路由器上的服务器采用Ngi ...

  8. 《linux就该这么学》课堂笔记12 网卡配置、防火墙配置

    1.网卡配置(四种方法,选其一即可,配置后须重启网络服务使其生效) 1)修改配置文件./etc/sysconfig/network-scripts/ifcfg-网卡名称 2)nmtui [RHEL7] ...

  9. Yocto开发笔记之《网卡配置》(QQ交流群:519230208)

    QQ群:519230208,为避免广告骚扰,申请时请注明 “开发者” 字样 ============================================== # ifconfig -a # ...

随机推荐

  1. 深入浅出ASP.NET MVC5系列之一

    前言 为避免看官乏味,本系列博客限定在较新的.Net framework 4.5.1,Asp.net MVC5,IIS 7.X集成模式. 对于微软应用层的技术.我向来不舍得花太多时间学习.但又由于公司 ...

  2. SqlServer——全文索引

    当我们想要模糊查询时,之前用like %来进行查询,但是为了提高查询速度,提出了全文索引. 全文索引是用空间换取了时间,它将每个表中的数据进行切分存储,这样就能很快的定位到模糊查询的数据. 全文索引快 ...

  3. 内网穿透神器ngrok——将本地项目驾到外网

    相信做Web开发的同学们,经常会遇到需要将本地部署的Web应用能够让公网环境直接访问到的情况,例如微信应用调试.支付宝接口调试等.这个时候,一个叫ngrok的神器可能会帮到你,它提供了一个能够在公网安 ...

  4. Vue-loader 开启压缩后的一些坑

    在使用vue-loader 配合webpack 对.vue文件进行加载的时候,如果开启了代码压缩会出来下面几种问题,做个记录. 丢失td结束标记,导致页面的布局错乱 input的属性type为text ...

  5. 【摘录】某表含有N个字段超精简模糊查询方法

    SELECT * FROM  table where CONCAT(a,b,c......) like '%key%' select name from syscolumns where id=obj ...

  6. 屠龙之路_假期罢工和公主私奔_SixthDay

    摘要:屠龙少年经过一周的长途跋涉后,终于来到了传说中的周末客栈.周末客栈是屠龙之路的必经之地,屠龙少年可以在周末客栈补给干粮,修补装备,好好休息一下,以便更好的上路.周末客栈有个不成文的规定:凡入住者 ...

  7. 线性表的链式存储C语言版

    #include <stdio.h> #include <malloc.h> #define N 10 typedef struct Node { int data; stru ...

  8. [转]浅谈jQuery EasyUI的属性设置

    原文地址:http://www.easyui.info/archives/1664.html 对jQuery EasyUI有一定了解的话,应该知道基本上每一个组件都有一个"options&q ...

  9. JavaScript写一个连连看的游戏

    天天看到别人玩连连看, 表示没有认真玩过, 不就把两个一样的图片连接在一起么, 我自己写一个都可以呢. 使用Javascript写了一个, 托管到github, 在线DEMO地址查看:打开 最终的效果 ...

  10. npm安装完bower,使用时提示bower不是内部或外部命令

    归根结底还是环境变量的问题,但是配了好几次没配成功,最后就直接把装好的node里面的复制到系统创建的环境变量目录下,问题解决! 问题描述:我们安装node.js,npm,通过npm安装bower一路正 ...