開了一個交流群,歡迎愛好者和開發者一起交流,轉載請注明出處。
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.38-6UL_ga+ge4944a5 zImage zImage-3.14.38-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 二、定制文件系統 1、創建ramdisk虛擬空間,用來放置文件系統 命令 # mke2fs –m 0 –I 2000 /dev/ram0 注釋:mke2fs將會自動判斷設備容量的大小並相應的配置自身,-m 0參數防止它給root保留空間,這樣會騰出更多有用的空間。 2、掛載剛才創建的虛擬盤,我這里掛載在/mnt/floppy目錄下 命令 # mount –t ext2 /dev/ram0 /mnt/floppy 3、創建文件系統必須目錄 命令 # cd /mnt/floppy # mkdir dev proc etc bin sbin lib mnt usr 4、確定/dev目錄下我們需要的設備文件 方案一、把現有/dev目錄中所有設備文件拷貝過來,然后刪除不必要的設備文件(不推薦使用) 命令:# cp –dpR /dev /mnt/floppy/dev 注釋:該命令會拷貝整個設備目錄但不拷貝文件內容,同時dpR開關保證連接文件仍然不變,不會拷貝連接指向原來文件,而且屬性不變。如果沒有SCSI設備,刪除所有以sd開頭的設備文件,如果不使用串口設備,刪除所有以cua開頭的文件,然后保留一些必要的設備文件。 方案二、只拷貝必要的設備文件: console —— 控制台設備 tty* —— 由控制台管理的虛擬終端 ram —— 虛擬內存盤設備(以后我們的系統將運行在虛擬盤中) null —— 空設備,非常有用的字符設備文件,送入這個設備的所有東西將被忽略。如果將任何程序的輸出結果重定向到/dev/null,則看不到任何輸出信息,因此腳本中常用它來消除本該顯示在屏幕上的其他信息 zero —— 零設備,只會得到空的內容,有時為了提高壓縮率,需要對某空間全零填充時需要使用該設備 inintrd —— 特殊的字符設備,被用來從用戶空間向系統內核發送切換運行級別的信息,屬於一個虛擬字符設備。 fd 0 —— 軟盤設備 hd 0 —— 硬盤設備(該項不是必須,如果您想掛載硬盤,請選擇該項) 命令:# 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 6、 確定/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/也可以刪一些不重要的腳本。 就這樣,只剩下了一個恐龍骨架~