第一篇:基于CF卡的 linux系統(tǒng)制作
在CF卡上安裝嵌入式linux全過程
吳剛 2007-4-4 摘要:本文主要介紹在一塊128M的CF卡上定制安裝linux操作系統(tǒng),并在此基礎(chǔ)上建立一個(gè)簡單的應(yīng)用平臺(tái)。
關(guān)鍵詞:extlinux,busybox, CF卡,嵌入式linux
隨著信息技術(shù)和網(wǎng)絡(luò)技術(shù)的高速發(fā)展,嵌入式技術(shù)的廣泛應(yīng)用,嵌入式系統(tǒng)已經(jīng)打破傳統(tǒng)PC工業(yè)的壟斷地位,成為非PC設(shè)備的主體。而作為嵌入式系統(tǒng),應(yīng)用環(huán)境通常比較惡劣,而應(yīng)用又比較簡單,為保證系統(tǒng)的穩(wěn)定性和便攜性通常使用DOM卡或CF卡一類的存儲(chǔ)設(shè)備來代替硬盤。
經(jīng)過一段時(shí)間的摸索和收集資料終于在一塊CF卡上實(shí)踐安裝了一個(gè)滿足特定需要的嵌入式linux系統(tǒng),這里取名為cflinux.在這里首先要感謝《babylinux制作全過程的》作者,正是這片文章,為我制作cflinux指明了道路。本文將講述在一張容量為128M的CF卡上定制安裝嵌入式linux操作系統(tǒng)的詳細(xì)過程,一 主機(jī)和目標(biāo)機(jī)情況簡介
主機(jī):
Linux:Red Hat 9.0 Kernel: 2.4.20 目標(biāo)機(jī):
基于X86的工控板
二 cflinux簡介
cflinux是一運(yùn)行于CF卡上的經(jīng)過自定義剪裁的嵌入式linux操作系統(tǒng)。因其運(yùn)行于CF卡上,故取名為cflinux.當(dāng)此操作系統(tǒng)和應(yīng)用環(huán)境搭建好后可以通過網(wǎng)絡(luò)telnet和串口訪問目標(biāo)板,可運(yùn)行QT/E圖形界面應(yīng)用程序??梢酝ㄟ^串口,網(wǎng)口和USB口和外圍設(shè)備交互。既可作為嵌入式操作系統(tǒng),也可作為啟動(dòng)盤作為系統(tǒng)維護(hù)工具。
三 linux得引導(dǎo)過程簡介
在系統(tǒng)啟動(dòng)時(shí),主板上的BIOS會(huì)讀取硬盤的主引導(dǎo)記錄(MBR),MBR中存放的是一段很小的程序,他的功能是從硬盤讀取操作系統(tǒng)核心文件并運(yùn)行,因?yàn)檫@個(gè)程序太小了,因此通常這個(gè)小程序不具備直接引導(dǎo)系統(tǒng)內(nèi)核的能力,他先區(qū)引導(dǎo)另一個(gè)稍微大一點(diǎn)的小程序去引導(dǎo)系統(tǒng)內(nèi)核。在linux系統(tǒng)中這樣得小程序有LILO,GRUB和SYSLINUX等。我們在這個(gè)項(xiàng)目中這里用到的引導(dǎo)程序是SYSLINUX得一個(gè)分支:EXTLINUX。
Linux系統(tǒng)內(nèi)核被引導(dǎo)程序裝進(jìn)內(nèi)存并運(yùn)行后,linux內(nèi)核會(huì)檢測系統(tǒng)中得各種硬件,并做好硬件得初始化工作,使他們在系統(tǒng)正式運(yùn)行后能正常工作。剩下就是linux內(nèi)核要做得最后一個(gè)工作:運(yùn)行/sbin下得init程序。Init是英文單詞(initialization)初始化得簡稱,init程序得工作是讀取/etc/inittab文件中的指令,對系統(tǒng)的各種軟硬件環(huán)境做最初的初始化工作,最后運(yùn)行g(shù)ettty活mingetty等待用戶輸入用戶名和密碼(當(dāng)然根據(jù)需要也可以跳過登錄這個(gè)步驟,直接以root身份登錄)。所有的工作就是這么簡單。明白了這個(gè)道理,你也可以寫一些腳本程序讓他在系統(tǒng)啟動(dòng)時(shí)的特定時(shí)間完成運(yùn)行,完成你指定的任務(wù)。/sbin/init程序只是系統(tǒng)默認(rèn)的運(yùn)行的第一個(gè)程序,他可以是一個(gè)二進(jìn)制程序也可以是一段bash腳本,一個(gè)指向另一個(gè)程序的鏈接。他的位置也并不一定在/sbin下,只要啟動(dòng)內(nèi)核時(shí)加上init參數(shù)節(jié)能被運(yùn)行,開始時(shí)給內(nèi)核加上init=/bin/sh參數(shù),內(nèi)核就能直接運(yùn)行時(shí)并給出提示符,不需要登陸。
四 extlinux安裝
EXTLINUX是SYSLINUX的一個(gè)新的派生。可以從linux系統(tǒng)的ext2和ext3文件系統(tǒng)啟動(dòng)。EXTLINUX使用和SYSLINUX相似,只需做一點(diǎn)改動(dòng)即可。首先從http://www.tmdps.cn/pub/linux/utils/boot/syslinux/ 上下載syslinux-3.20.tar.gz。
cp syslinux-3.20.tar.gz /usr/tmp tar xzvf syslinux-3.20.tar.gz 進(jìn)行解壓。然后用IDE to CF轉(zhuǎn)接卡把CF卡連到主機(jī)上(注意:一般CF卡是不支持熱插拔的,故插上CF后一般需要重新啟動(dòng)主機(jī)系統(tǒng))。我的CF卡對應(yīng)的設(shè)備文件是hdd1.在這里先使用fdisk工具把CF卡分成兩個(gè)區(qū),一個(gè)用于存放內(nèi)核和randisk,另一個(gè)用于存放應(yīng)用程序及相關(guān)文件。Fdisk的使用可參見相關(guān)資料,這里不做詳細(xì)說明。我的CF卡主分區(qū)為hdd1,擴(kuò)展分區(qū)為hdd2,將所有的擴(kuò)展分區(qū)都分給邏輯分區(qū)hdd5。分好區(qū)后,將hdd1 和 hdd5格式化為ext2系統(tǒng) mke2fs –m 0 /dev/hdd1 mke2fs –m 0 /dev/hdd5 //-m 0參數(shù)的作用是告訴系統(tǒng)不為root保留空間 一切準(zhǔn)備好后,就可以安裝EXTKINUX了,安裝步驟如下: mount –t auto /dev/hdd1 /mnt cd /usr/tmp/syslinux-3.20/extlinux./extlinux –i /mnt
安裝成功后會(huì)提示extlinux 成功安裝到/mnt,然后在/mnt目錄下會(huì)出現(xiàn)extlinux.sys文件。
umount /mnt 至此extlinux已經(jīng)安裝完畢,可以把CF卡插到工控板上,上電啟動(dòng)一下看看有什么效果。如果安裝成功的話,啟動(dòng)后會(huì)出現(xiàn)如下的提示:
EXTLINUX 3.20 2006-08-06 EBIOS Copyright(c)1994-2005 H.peter Anvin Could not finf kernel image:linux boot: 注:關(guān)于extlinux的詳細(xì)使用方法,請參閱syslinux-3.20目錄下的extlinux.doc文件
五 linux內(nèi)核編譯
在內(nèi)核編譯前,我們首先要明確你需要內(nèi)核支持什么樣的硬件,支持多少種分區(qū)類型和文件系統(tǒng),支持那些網(wǎng)卡,支持那些網(wǎng)絡(luò)協(xié)議等等。雖然現(xiàn)在有128兆的空間,但也不能什么都要,夠用就行啊。好了,現(xiàn)在開始內(nèi)核的編譯工作。首先準(zhǔn)備好內(nèi)核代碼,可以到官方網(wǎng)站上下載,我的內(nèi)核源碼是安裝linux時(shí)帶上的,在/usr/src/linux-2.4/目錄下。cd /usr/src/linux-2.4 make mrproper 清理源碼樹 make menuconfig 然后對各項(xiàng)取舍如下:(至于具體配置項(xiàng)的意義,請參考相關(guān)資料,不在本文討論范圍之內(nèi))
code maturity level options 先不選,當(dāng)我們配置好常規(guī)的東西,要加入framebuffer支持時(shí)再將這一項(xiàng)選上。因?yàn)樵?.4.20版本中,對frambuffer的支持尚屬于試驗(yàn)性代碼,如果不選擇此項(xiàng)將不能配置frambuffer.Load module support 取消選擇此項(xiàng),為了簡化系統(tǒng)的制作,這個(gè)項(xiàng)目中將不選擇可加載內(nèi)核模塊的支持。
Processer type and features Processor family中選擇你需要的cpu類型,如果你想讓老至386,新到p4的CPU都能運(yùn)行cflinux的話,請選擇386,否則根據(jù)實(shí)際情況來選擇。建議選386。
General setup Networking support 都選上
PCI支持 選上,除非你不用PCI設(shè)備,不過一般人都要的,因?yàn)榇蟛糠值木W(wǎng)卡都是PCI的。
System V ipc 選上 Systrl support選上
Kernel support for ELF 選上
其他內(nèi)容如果沒什么特殊需要,都不選。
Memory technology devices(MTD)不選
Parallel port support 由于本項(xiàng)目中需要使用并口打印機(jī),故將此項(xiàng)選上
Plug and play configuration 不選
Block devices Normal floppy disk support 不選
Loopback device support RAM disk support Initial RAM disk(initrd)support Per partion statics in /proc/partions
以上幾項(xiàng)都選上。由于這幾項(xiàng)比較重要這里做詳細(xì)說明。Loopback device 即回環(huán)設(shè)備,我們平時(shí)用的命令瓜子ramdisk或光盤鏡像時(shí)都用到回環(huán)設(shè)備。如:mount –o loop ramdisk.img /mnt RAM disk support 即內(nèi)存磁盤(比較貼切的說法是虛擬磁盤,即撥出一部分內(nèi)存當(dāng)磁盤用)。本項(xiàng)目中將所有系統(tǒng)的的文件都做成ramdisk,所以在運(yùn)行時(shí)你在根文件系統(tǒng)上所作的操作都是在內(nèi)存中完成的,但形式上和在真正的磁盤上運(yùn)行一樣。只不過放在RAM disk上的所有內(nèi)容會(huì)在系統(tǒng)關(guān)閉后全部消失。
不僅在運(yùn)行cflinux時(shí)用到ramdisk,我們在制作根文件系統(tǒng)時(shí)也用到ramdisk。學(xué)習(xí)ramdisk的使用也是制作cflinux的重要目標(biāo)之一。在linux中還支持另外一種虛擬磁盤:shm.(shared memory),這種要虛擬磁盤機(jī)制比ramdisk更加先進(jìn)。Ramdisk的大小是固定的,由編譯內(nèi)核時(shí)的default ram disk size決定,默認(rèn)為4096K,因?yàn)楸卷?xiàng)目中要往ramdisk中放很多東西,故這里我們要將其改為8192K(8M)。也可以在內(nèi)核加載錢加上ramdisk_size=參數(shù)來決定他的大小,但系統(tǒng)一啟動(dòng),ramdisk的大小是不能改變的,而shm的大小卻是動(dòng)態(tài)改變的。默認(rèn)情況下為物理內(nèi)存的一半,當(dāng)系統(tǒng)需要更多內(nèi)存的時(shí)候,他就自動(dòng)縮小。系統(tǒng)內(nèi)存富余時(shí),他又會(huì)自動(dòng)增大,這樣可以充分靈活的利用內(nèi)存空間,shm通常作為磁盤的高速緩存,放在系統(tǒng)運(yùn)行中的臨時(shí)文件等。既然shm這么好,為什么這里還使用ramdisk呢,因?yàn)閞amdisk可以很方便的在系統(tǒng)啟動(dòng)時(shí)加載,而shm則沒那么容易。Initial RAM disk(initrd)support 即初始化ramdisk支持,這個(gè)選項(xiàng)讓內(nèi)核有能力在內(nèi)核加載階段就能裝入RAMDISK,并運(yùn)行其中的內(nèi)容。否則只能在系統(tǒng)運(yùn)行階段用ramdisk,我們平時(shí)編譯了一個(gè)內(nèi)核后,如果你的根文件系統(tǒng)用的是ext3,而你沒有把ext編譯進(jìn)內(nèi)核,而作為一個(gè)模塊編譯了,那么就需要用mkinitrd命令做一個(gè)initrd,這個(gè)ramdisk里放了ext3的模塊,這樣內(nèi)核在加載根文件系統(tǒng)前就能正確識(shí)別ext3系統(tǒng),否則內(nèi)核加載的最后一步就會(huì)出現(xiàn)kernel panic cant not find init?..的錯(cuò)誤。
Per partion statics in /proc/partions 這個(gè)選項(xiàng)不是必須的,但是不把這個(gè)選項(xiàng)編譯進(jìn)內(nèi)核在執(zhí)行fdisk指令時(shí)就會(huì)提示找不到/proc/partions,另外還可能出現(xiàn)不能以簡寫的掛載命令來掛載文件系統(tǒng)。所以我把該選項(xiàng)也編譯進(jìn)內(nèi)核。
Multi-device support(RAID and LVM)不選 Cryptography support(CryptoAPI)不選
Networking options 在這一大項(xiàng)中需要把下列項(xiàng)目編譯進(jìn)內(nèi)核: Packet socket:mmapped IO TCP/IP networking 對于IP:advanced router 這項(xiàng),如果你想重點(diǎn)把cflinux用做靜態(tài)路由軟件,那么把這項(xiàng)編譯進(jìn)去。另外unix domain sockets 這項(xiàng)也不必選擇,只有運(yùn)行X的情況下才需要這項(xiàng)。
Telephony support 不選
ATA/IDE/MFM/RLL support 選上,然后在下面的“IDE,ATA and ATAPI Block Devices”按鈕就被激活,下面幾項(xiàng)選上,其余都不用選
Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support Include IDE/ATA-2 DISK support Auto-Geometry Resizing support Include IDE/ATA CDROM support
SCSI support 因?yàn)檫@個(gè)項(xiàng)目中是通過CF卡啟動(dòng)的,所以把這項(xiàng)也選上。在這個(gè)大項(xiàng)中只需選擇一下3項(xiàng)即可: SCSI disk support SCSI generic support SCSI tape support
Fusion MPT device support 不選 IEEE1394(FireWrite)support 不選
I2O device support 選上,子項(xiàng)全部選上 Network device support 選上,這樣就可以支持網(wǎng)卡了,其余都選擇N.然后點(diǎn)Ethernet(10 or 100 Mbit)按鈕選擇你 需要的網(wǎng)卡驅(qū)動(dòng),你可以把最常見的幾種Reltek8139,NE2000,3COM等網(wǎng)卡編譯進(jìn)內(nèi)核.雖然網(wǎng)卡的驅(qū)動(dòng)通常都很小
如果你發(fā)現(xiàn)你需要的網(wǎng)卡是灰色的,不能點(diǎn),那么先確定他上一級(jí)的選項(xiàng)已經(jīng)點(diǎn)了,比如你想選NE2000的網(wǎng)卡,就必需先選擇ELSA,VLB,PCI and on board controllers.如果還不能點(diǎn),那么請確定是否已經(jīng)把PCI的支持選項(xiàng)選上了,(在Geneal setup)里.沒有PCI的支持,PCI的網(wǎng)卡將不能選.Amateur Radio support 不選 IrDA(infrared)support 不選 ISDN subsystem 不選
Old CD-ROM drivers(not SCSI,not IDE)不選
Import core support 因?yàn)楸卷?xiàng)目中要使用到鍵盤和鼠標(biāo),所以選上該項(xiàng),其子項(xiàng)也全部選中。然后把Horizontal screen resoulution 改為 800,vertial scrren resoulution 改為600。
Character devices 這一項(xiàng)和block devices一樣重要,這里將作重點(diǎn)講述。
如果要在終端上顯示系統(tǒng)信息就必須將virtual terminal 和support for console on virtual terminal 選上。因?yàn)楸卷?xiàng)目中防治系統(tǒng)信息覆蓋掉QT的圖形界面,所以沒選這兩項(xiàng)。
接下來就是對串口的指出。因?yàn)楸卷?xiàng)目中需要通過串口和并口與設(shè)備交互,故下面幾項(xiàng)都要選上:
Standard(gtneric18250/16550 and compatible UARTs)serial support Support for console serial port Extended dumb serial driver options Support special multport boards Non-standard serial port support
Unix98 PTY support(telnetd 服務(wù)用到)Parallel printer support Support for console on line printer Support for user-space parallel device drivers
哈哈,下面的文件系統(tǒng)可是個(gè)重頭戲哦,配置完這一項(xiàng),整個(gè)內(nèi)核配置也基本急速了。選上下面幾個(gè)常用的文件系統(tǒng)選項(xiàng): Kernel auto mounter support Kernel automounter version 4 support DOS FAT fs support MSDOS fs support UMSDOS:unix-like file system on top of standard MSDOS VFAT fs support EFS file system support /proc file system support 少了他很多軟件和命令都不能運(yùn)行 /dev/pts file system for unix98 PTYs telnetd服務(wù)用到 ROM file system support Second extended fs support cflinux的基本文件系統(tǒng)
最后是console drivers 這是linux在字符模式下高分辨率顯示的內(nèi)核模塊,前面三個(gè)子項(xiàng)都選上。
Frame-buffer support 按鈕是灰色的不能選,別急,回到第一個(gè)大項(xiàng),選上他,然后在Frame-buffer support的子項(xiàng)中選上 Support for framebuffer devices VESA VGA granphics console 你也可以選擇其他的顯卡驅(qū)動(dòng),比如nVida的,但是VESA和VGA是通用性最好的,只要不是幾十年前的黑白卡,都兼容VESA和VGA。Support only 8 pixels wide fonts 這個(gè)一定要選,否則當(dāng)你給內(nèi)核傳遞vga=768參數(shù),讓linux在字符界面下高分辨率顯示的時(shí)候,系統(tǒng)會(huì)因?yàn)檎也坏胶线m的字體而返回低分辨率模式。
好了,所有的內(nèi)核配置到這里就全部結(jié)速了,剩下的幾個(gè)大項(xiàng)全部不用選。保存退出。make dep make baImage 編譯好的內(nèi)核放在:/usr/src/linux-2.4.20-8/arch/i386/boot目錄下 將其拷貝到CF卡的主分區(qū)上: mount /dev/hdd1 /mnt cp /usr/src/linux-2.4.20-8/arch/i386/boot/bzImage /mnt
到此為止我們已經(jīng)安裝好了extlinux和內(nèi)核編譯,現(xiàn)在就可以試試剛編譯的內(nèi)核是否能啟動(dòng)了。不過首先要在bzImage所在的目錄建立extlinux.conf配置文件,告訴extlinux在哪里尋找內(nèi)核和ramdisk。extlinux.conf的格式如下: default emblinux display logo.txt label emblinux kernel bzImage append root=/dev/hdc1 initrd=ramdisk.img ide=nodma vga=0x0314 保存即可。注:在工控板上cf卡對應(yīng)的設(shè)備是hdc所以這里用root=/dev/hdc1 指明根文件系統(tǒng)所在 initrd=ramdisk.img 指明ramdisk名稱。
ide=nodma 告訴內(nèi)核不使用DMA控制器,這是針對CF卡的一個(gè)選項(xiàng)。vga=0x0314 指明分辨率為800×600
執(zhí)行 umount /mnt 卸載CF卡,然后將CF卡插到工控板上上電啟動(dòng),看看是不是能看到系統(tǒng)內(nèi)核啟動(dòng)信息了啊。
六 編譯busybox 1 busybox簡介
Busybox是一個(gè)集成一百多個(gè)最長用的linux命令和工具的軟件,他甚至還集成了http服務(wù)器、dhcp服務(wù)器和telnet服務(wù)器,而所有這些功能卻只有1M左右的大小。我們平時(shí)用的那些linux命令就好比分離的電子元件,而busybox就好比是一個(gè)集成電路,把常用的工具和命令集成壓縮在一個(gè)可執(zhí)行的文件里,功能基本不變,而大小卻小很多倍,在嵌入式式linux中使用非常廣泛?,F(xiàn)在最新的busybox版本是1.5.0可以從busybox的官方網(wǎng)站上下載得到:http://www.tmdps.cn> # # Note: BusyBox init doesn't support runlevels.The runlevels field is # completely ignored by BusyBox init.If you want runlevels, use # sysvinit.# # Format for each entry: # # id == tty to run on, or empty for /dev/console # runlevels == ignored # action == one of sysinit, respawn, askfirst, wait, and once # process == program to run # Startup the system null::sysinit:/bin/mount-o remount,rw / null::sysinit:/bin/mount-t proc proc /proc null::sysinit:/bin/mount-a >> /etc/mtab null::sysinit:/bin/hostname-F /etc/hostname null::sysinit:/sbin/ifconfig lo 127.0.0.1 up null::sysinit:/sbin/ifconfig-a eth0 null::sysinit:/sbin/ifconfig eth0 192.168.4.44 netmask 255.255.255.192 null::sysinit:/sbin/route add-net 127.0.0.0 netmask 255.0.0.0 lo null::sysinit:/sbin/route add-net 192.168.4.0 netmask 255.255.255.255 eth0 # now run any rc scripts ::sysinit:/etc/init.d/rcS # Set up a couple of getty's # 使用login登陸管理 tty1::respawn:/sbin/getty 38400 tty1 #不需要登陸直接進(jìn)入控制臺(tái),進(jìn)行操作 #tty1::respawn:/bin/sh tty2::askfirst:/bin/sh # Put a getty on the serial port #ttyS0::respawn:/sbin/getty-L ttyS0 115200 vt100 # Stuff to do for the 3-finger salute ::ctrlaltdel:/sbin/reboot ::restart:/sbin/init # Stuff to do before rebooting null::shutdown:/bin/umount-a –r passwd: root:x:0:0:root:/root:/bin/sh cf:x:1001:0:Linux User,,:/home/soullon:/bin/sh shadow: root::10933:0:99999:7::: cf::13604:0:99999:7::: 注意:這里兩個(gè)用戶都沒設(shè)密碼,如果要加密碼胡話在用戶名后的第一個(gè)“:”和第二個(gè)“:”之間加上密碼胡hash值。如: root:$1$NuFDgiiI$664QR8N4HSdgkUDKpxEB00:10933:0:99999:7::: shadow-: root::10933:0:99999:7::: cf::13604:0:99999:7::: resolv.conf -> /tmp/resolv.conf fstab: /dev/hdc1 / ext2 defaults 1 1 /dev/hdc1 / ext2 defaults 1 1 none /proc proc defaults 0 0 usbdevfs /proc/bus/usb usbdevfs rw 0 0 none /dev/pts devpts rw,gid=5,mode=620 0 0 none /tmp tmpfs defaults 0 0 /dev/hdc5 /myapp ext2 defaults 0 0 init.d(目錄): rcS: #start inetd and telnetd /sbin/telnetd-p 23 #run myapp export QTDIR=/yysg export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/myapp/lib:/usr/lib cd /myapp./myapp –qws issue: Welcome to CFLinux profile : # ~/.bashrc: executed by bash(1)for non-login interactive shells.export PATH= /bin: /sbin: /usr/bin: /usr/sbin: /usr/bin/X11: /usr/local/bin # If running interactively, then: if [ “$PS1” ];then if [ “$BASH” ];then export PS1=“[u@h W]$ ” alias ll='/bin/ls--color=tty-laFh' n/ls--color=tty-F' export LS_COLORS='no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.jpg=01;35:*.jpeg=01;35:*.png=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.mpg=01;35:*.mpeg=01;35:*.avi=01;35:*.fli=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:';else if [ “`id-u`”-eq 0 ];then export PS1='# ' else export PS1='$ ' fi fi export USER=`id-un` export LOGNAME=$USER export HOSTNAME=`/bin/hostname` export HISTSIZE=1000 export HISTFILESIZE=1000 export PAGER='/bin/more ' export EDITOR='/bin/vi' export INPUTRC=/etc/inputrc export DMALLOC_OPTIONS=debug=0x34f47d83,inter=100,log=logfile ### Some aliases alias ps2='ps facux ' alias ps1='ps faxo “%U %t %p %a” ' alias af='ps af' alias cls='clear' alias df='df-h' alias indent='indent-bad-bap-bbo-nbc-br-brs-c33-cd33-ncdb-ce-ci4-cli0-cp33-cs-d0-di1-nfc1-nfca-hnl-i4-ip0-l75-lp-npcs-npsl-nsc-nsob-nss-ts4 ' #alias bc='bc-l' alias minicom='minicom-c on' alias calc='calc-Cd ' alias bc='calc-Cd ' fi; inputrc: # /etc/inputrc-global inputrc for libreadline # See readline(3readline)and `info readline' for more information.# Be 8 bit clean.set input-meta on set output-meta on set bell-style visible # To allow the use of 8bit-characters like the german umlauts, comment out # the line below.However this makes the meta key not work as a meta key, # which is annoying to those which don't need to type in 8-bit characters.# set convert-meta off “e0d”: backward-word “e0c”: forward-word “e[h”: beginning-of-line “e[f”: end-of-line “e[1~”: beginning-of-line “e[4~”: end-of-line #“e[5~”: beginning-of-history #“e[6~”: end-of-history “e[3~”: delete-char “e[2~”: quoted-insert # Common standard keypad and cursor #(codes courtsey Werner Fink, securetty: tty1 tty2 tty3 tty4 tty5 tty6 tty7 tty8 ttyS0 ttyS1 ttyS2 ttyS3 network(目錄): interfaces: # Configure Loopback auto lo iface lo inet loopback 八 復(fù)制需要的庫到/lib目錄下 1 看看需要什么庫 進(jìn)入busybox編譯目錄,執(zhí)行l(wèi)dd指令看看需要哪些動(dòng)態(tài)聯(lián)結(jié)庫 #cd /usr/tmp/busybox-1.5.0 #ldd busybox 會(huì)出現(xiàn)如下信息: libcrypt.so.1-> /lib/libcrypt.so.1(0x40029000)libc.so.6-> /lib/tls/libc.so.6(0x42000000)/lib/ld-linux.so.2-> /lib/ld-linux.so.2(0x4000000) 2 拷貝庫文件 然后把這些庫文件相關(guān)聯(lián)的庫文件都拷貝到相應(yīng)的目錄: #cd /usr/tmp/rootfs/lib #cp –arf /lib/libcrpt*./ #cp –arf /lib/ld-linux*./ #mkdir tls #cp –arf /lib/tls/libc.so*./tls/ 如果你的應(yīng)用程序還需要其他的動(dòng)態(tài)庫,且不是很大的話都可以放過來。 九 制作ramdisk映象文件 cflinux根文件系統(tǒng)需要的所有東西都已經(jīng)在/usr/tmp/rootfs目錄下準(zhǔn)備好了。我們將利用ramdisk把這些內(nèi)容做成ramdisk映象文件。 以下是ramdisk的制作過程。#cd /usr/tmp #mkdir ramdisk #dd if=/dev/zero of=./ramdisk.img bs=1M count=6 讀入了 6+0個(gè)塊 輸出了 6+0個(gè)塊 #mke2fs –m 0 ramdisk.img make2fs 1.32(09-Nov-2002)ramdisk.img is not a block special device Proceed anyway?(y,n)//輸入y,按回車鍵 Filesystem label = OS type:Linux Block size=1024(log=0)1536 inodes ,6144blocks ???????????????????? 180 days,whichever comes first.Use tune2fs –c or –I to overrite zero是一個(gè)特殊的設(shè)備,表示全部為零的字符塊。上面這條指令的意思是把系統(tǒng)的第一個(gè)ramdisk用全部為0的數(shù)據(jù)填充。Bs=1M 表示塊的大小為1M,count=6 表示有6塊。即我們監(jiān)理了一個(gè)大小為6M的ramdisk.接下來就應(yīng)該往ramdisk中填充文件了: #mount –o loop ramdisk.img ramdisk #cp –arf rootfs/* ramdisk/ #umount ramdisk 做完以上幾步,你就應(yīng)該明白ramdisk設(shè)備的含義,他和hda1,hdb1,一樣的塊設(shè)備用mount掛到文件系統(tǒng)下后就可以訪問,往里面放東西,但是所有的東西在內(nèi)存上,關(guān)機(jī)將丟失所有東西。 十 系統(tǒng)整合 前面已經(jīng)做好了內(nèi)核,安裝好了extlinux,現(xiàn)在只需要把ramdisk放到bzImage 所 在的目錄就可以了。 #mount /dev/hdd1 /mnt #cp ramdisk /mnt #umount /mnt 好了現(xiàn)在就可以把cf卡插到工控板上,試一把了。如果一切正常的話就可以進(jìn)入登陸界面了,呵呵。 十一 移植應(yīng)用程序 在本文開始的時(shí)候已經(jīng)說過將操作系統(tǒng)文件放在cd卡的注分區(qū)上hdd1上,把應(yīng)用程序放在邏輯分區(qū)hdd5上。因此我們將編譯好的應(yīng)用程序及其相關(guān)文件拷貝到hdd5上。由于應(yīng)用程序用到的共享庫不是固定的所以就沒有將他們放到ramdisk中,直接和應(yīng)用程序放在一起,只不過在系統(tǒng)啟動(dòng)后要將這個(gè)庫目錄加到系統(tǒng)庫目錄路徑上即可。在這個(gè)項(xiàng)目中,我在hdd5上件了一個(gè)lib目錄,然后把應(yīng)用程序用到的庫全部放在這個(gè)目錄下面,然后在profile文件中增加一項(xiàng)兩行就行: export LD_LIBRARY_PATH=#LD_LIBRARY_PATH:/myapp/lib export QTIDR=/myapp 十二 參考文獻(xiàn) 《BabyLinux制作過程詳解》作者:GuCuiwen email:win2linux@163.com 應(yīng)用Scratchbox構(gòu)建基于CF卡的嵌入式Linux系統(tǒng) 石濤 師衛(wèi) (太原理工大學(xué)信息工程學(xué)院 山西省 太原市 030024) 摘要: 本文介紹了一種應(yīng)用Scratchbox構(gòu)建Linux操作系統(tǒng)的新方法,詳細(xì)論述了應(yīng)用Scratchbox和Busybox等開源軟件在CF卡上構(gòu)建一個(gè)嵌入式Linux操作系統(tǒng)的全過程。關(guān)鍵詞:Busybox; Scratchbox ;CF ;嵌入式Linux操作系統(tǒng) 中圖法分類號(hào):TP399文獻(xiàn)標(biāo)識(shí)碼:A Construction of embeded Linux on CF card using Scratchbox SHI Tao, SHI Wei (Department of Information Engineering,Taiyuan University of Technology,Shanxi Taiyuan,030024) Abstract:This paper introduces a new method of building embedded Linux using Scratchbox.It also describes the whole process in detail of building a embedded Linux on CF card using Scratchbox and Busybox etc, open source software.Key Words:Busybox;Scratchbox;CF;embedded Linux 面的4項(xiàng)內(nèi)容,分別來構(gòu)建Linux根文件系統(tǒng),這樣不僅增加了開發(fā)的時(shí)間和成本,而且增加了開發(fā)的難度,很難成功。在長期的摸索和實(shí)踐中,我們發(fā)現(xiàn)了一種新的開源軟件Scratchbox,利用他來構(gòu)建嵌入式Linux系統(tǒng)可以達(dá)到事半功倍的效果。 Scratchbox是一個(gè)交叉編譯的工具組,可以簡化嵌入式Linux應(yīng)用開發(fā)。Scratchbox提供了一組工具,用這組工具我們可以構(gòu)建一個(gè)完整的Linux交叉編譯環(huán)境。用Scratchbox來構(gòu)建嵌入式Linux系統(tǒng)具有以下優(yōu)點(diǎn): 1)運(yùn)行與chroot的環(huán)境中,完全獨(dú)立于主機(jī),編譯2)可以很容易的變換目標(biāo)系統(tǒng)中的工具鏈。3)根據(jù)Linux系統(tǒng)的目標(biāo)運(yùn)行環(huán)境對chroot后的系過程將與主機(jī)系統(tǒng)無關(guān)。 引言 Linux由于其內(nèi)核的可裁剪性,而受到嵌入式市場應(yīng)用領(lǐng)域的青睞。在某些領(lǐng)域,Linux實(shí)際上已經(jīng)處于領(lǐng)導(dǎo)地位,成為最流行的嵌入式操作系統(tǒng)之一。然而,我們在應(yīng)用嵌入式Linux操作系統(tǒng)時(shí),都面臨著如何快速方便的構(gòu)建一個(gè)特定的嵌入式環(huán)境的問題。本文在這里探索了一種新的方法,利用Scratchbox、Busybox等開源軟件實(shí)現(xiàn)基于CF卡的嵌入式linux系統(tǒng)的構(gòu)建。 統(tǒng)進(jìn)行定制,這樣就可以進(jìn)行交叉編譯,使軟件誤認(rèn)為是在1、嵌入式Linux系統(tǒng)構(gòu)建方法介紹 嵌入式Linux系統(tǒng)包含引導(dǎo)程序、內(nèi)核和文件系統(tǒng)3 目標(biāo)平臺(tái)上進(jìn)行編譯。 4)可以自動(dòng)創(chuàng)建Linux的根文件系統(tǒng)所需的目錄結(jié)構(gòu)?;赟cratchbox以上幾個(gè)優(yōu)點(diǎn),我們完全可以在自己 部分。對于嵌入式Linux系統(tǒng)來說,這三個(gè)部分是必不可少的。在這3個(gè)部分中,構(gòu)建Linux的根文件系統(tǒng)是最困難的。在這里主要介紹一些構(gòu)建Linux根文件系統(tǒng)的方法。 Linux的根文件系統(tǒng)具有非常獨(dú)特的特點(diǎn),就其基本組成來說,Linux的根文件系統(tǒng)應(yīng)該包括支持Linux系統(tǒng)正常運(yùn)行的基本內(nèi)容,包含著系統(tǒng)使用的軟件和庫,以及所有用來為用戶提供支持架構(gòu)和用戶使用的應(yīng)用軟件。因此,至少應(yīng)該包括以下幾項(xiàng)內(nèi)容。 1)基本的文件系統(tǒng)結(jié)構(gòu),包含一些必需的目錄:2)基本程序運(yùn)行所需的庫函數(shù),如Glibc/uC-libc。3)基本的系統(tǒng)配置文件,比如rc,inittab等腳本文/dev,/proc,/bin,/etc,/sbin,/usr,/lib,/tmp等。的主機(jī)系統(tǒng)中用Scratchbox構(gòu)建一個(gè)基于目標(biāo)平臺(tái)的虛擬系統(tǒng),chroot進(jìn)這個(gè)系統(tǒng)之后,對工具鏈和函數(shù)庫進(jìn)行定制編譯。然后將Scratchbox創(chuàng)建好的根文件系統(tǒng)拷貝到目標(biāo)平臺(tái)上即可。 2、構(gòu)建嵌入式Linux系統(tǒng) 2.1 Linux操作系統(tǒng)裁剪 由于CF卡的容量大小有限,我們在CF卡上構(gòu)建Linux 操作系統(tǒng)時(shí),需要對Linux內(nèi)核進(jìn)行裁剪。要得到一個(gè)精簡的Linux操作系統(tǒng),大致有二個(gè)步驟:編譯裁剪內(nèi)核,形成精簡的內(nèi)核映像;構(gòu)建根文件系統(tǒng),形成可以運(yùn)行的新系統(tǒng)。 件。 4)基本的應(yīng)用程序,如sh,ls,cp,mv等。 傳統(tǒng)的構(gòu)建Linux根文件系統(tǒng)方法,通常都是按照上 2.2.1 編譯Linux內(nèi)核 Linux內(nèi)核裁剪主要是根據(jù)系統(tǒng)所需要的功能,縮減掉不需要的模塊和組件,重新編譯內(nèi)核。Linux內(nèi)核由專門的機(jī)構(gòu)維護(hù),我們可以從 Linux 官方網(wǎng)站 (http:// 通信地址:太原理工大學(xué)北區(qū)3241信箱 郵編:030024 聯(lián)系電話:0351-6011570,***師衛(wèi) 男 太原理工大學(xué)信息工程學(xué)院,電路與系統(tǒng) 碩士導(dǎo)師,主要研究方向嵌入式系統(tǒng)應(yīng)用 與書同行——學(xué)做讀書筆記卡 北郊小學(xué):左婧 面對讀課外書,怎樣才能不忘呢?學(xué)到的東西怎么才能不丟呢?我國歷來就有一條卓有成效的治學(xué)經(jīng)驗(yàn),叫做“不動(dòng)筆墨不讀書”。章學(xué)誠在《文史通義》中寫道:“札記之功,必不可少;如不札記,則無窮妙者,皆如雨珠落大海矣。”“摘抄法”就是一種常見的讀書筆記的方法。這次的綜合實(shí)踐課上學(xué)生們展開了豐富的想象一起學(xué)做讀書筆記卡。 學(xué)生們先從版面的設(shè)計(jì)入手,然后在內(nèi)容上進(jìn)行篩選,從好詞、好句到好段一一不放過。接著學(xué)生配上小插圖,使整體看上去美觀、整潔、清新。雖是第一次嘗試做,可都做得有模有樣,新穎脫俗,看著他們臉上的專注表情,似乎對于閱讀的渴求又增添了幾分興趣。篇二:試談如何培養(yǎng)學(xué)生做讀書筆記的習(xí)慣 試談如何培養(yǎng)學(xué)生做讀書筆記的習(xí)慣 攀枝花市第十一中小學(xué)魏長青 古人有條著名的讀書治學(xué)經(jīng)驗(yàn),叫做讀書要做到:眼到、口到、心到、手到。這“手到”就是做讀書筆記。讀完一篇文章或一本書后,應(yīng)根據(jù)不同情況,寫好讀書筆記。寫讀書筆記,對于深入理解、牢固掌握所學(xué)到的知識(shí),對于積累學(xué)習(xí)資料,以備不時(shí)之需,很有必要。在讀書時(shí),寫讀書筆記是訓(xùn)練閱讀的好方法。記憶,對于積累知識(shí)是重要的,但是不能迷信記憶。列寧具有驚人的記憶力,他卻勤動(dòng)筆,寫下了大量的讀書筆記。俗話說:“最淡的墨水,也勝過最強(qiáng)的記憶?!彼裕韲膶W(xué)家托爾斯泰要求自己:身邊永遠(yuǎn)帶著鉛筆和筆記本,讀書和談話的時(shí)候碰到一切美妙的地方和話語都把它記下來。 要讓學(xué)生養(yǎng)成做讀書筆記的習(xí)慣,首先要讓學(xué)生了解讀書筆記的種類以及寫法: 一、符號(hào)式筆記 我們讀書的時(shí)候,把書中重要的、或者有疑問的地方,用各種符號(hào)(例如直線、曲線、括弧、三角、問號(hào)??等等)勾劃出來,或在書的空白處寫上批語,這種筆記,就是符號(hào)式筆記。 做符號(hào)式筆記需要注意以下幾點(diǎn): (1)所讀的書必須是自己的。對于在圖書館借的或借的別人的圖書,不應(yīng)該亂批亂畫。(2)每一種符號(hào)所代表的意思,自己應(yīng)該固定下來,不要隨意改動(dòng)。(3)符號(hào)不能作得過多。(4)要清楚整齊。 二、摘錄式筆記 摘錄式筆記就是把我們從書上、報(bào)上看到的一些精辟的,富有哲理的,對我們很有啟發(fā)的內(nèi)容抄寫下來。這種方法看起來比較費(fèi)事,其實(shí)是一種省時(shí)省力,積累知識(shí)的好辦法。這是最簡單的一種做讀書筆記的方法。摘抄可以加深理解和記憶,日后查找起來,面對茫茫的書海,就能體會(huì)到作摘錄筆記的優(yōu)點(diǎn)了。作摘錄筆記時(shí)要注意以下幾個(gè)問題: (1)要有選擇地抄錄??梢哉槐緯?、一篇文章中的一些好的詞語、句子和精彩的段落等。 (2)要忠實(shí)于原文。(3)要注明出處。 三、剪貼式筆記 在自己訂閱的報(bào)紙、雜志上看到好的文章或者其它有用的資料及時(shí)剪下來,經(jīng)過整理就是剪貼式筆記。這種方法收集材料快,也很簡便。 剪貼式筆記需要注意以下幾點(diǎn): (1)進(jìn)行剪貼式筆記時(shí)要按不同的內(nèi)容分類。(2)每一條剪貼的內(nèi)容要注明出處、時(shí)間。 (3)短小的剪貼筆記也可以作為讀書卡片的內(nèi)容。 四、感想式筆記 讀完一本好書或一篇好的文章,將自己的感想和體會(huì)寫出來,這種讀書筆記就是感想式筆記,也叫讀后感。 這種讀書筆記重在訓(xùn)練同學(xué)們的理解和表達(dá)能力,也是我們小學(xué)生在寫作時(shí) 需要用到的。讀后感的寫法較之于前面所提到的讀書筆記的寫法,要難些。 五、寫讀書卡 其次,要培養(yǎng)學(xué)生做讀書筆記的習(xí)慣,還要注意通過一些活動(dòng),激發(fā)學(xué)生的 興趣。 做讀書筆記要讓學(xué)生形成習(xí)慣,那就是說要讓學(xué)生長時(shí)間堅(jiān)持做下去。雖然學(xué)生明白了“不動(dòng)筆墨不讀書”的道理,許多學(xué)生也在做讀書筆記的過程中嘗到了一定的“甜頭”,但根據(jù)學(xué)生的年齡特點(diǎn),在做了一段時(shí)間以后,許多學(xué)生往往會(huì)出現(xiàn)懈怠的現(xiàn)象,比如有的學(xué)生做得沒開始的時(shí)候認(rèn)真了,有的干脆不做了。如何使學(xué)生對讀書筆記保持持久的興趣呢?像小學(xué)中的很多項(xiàng)目一樣,搞活動(dòng)可以有效地激發(fā)學(xué)生做讀書筆記的興趣,使他們能持久地做好讀書筆記。 跟做讀書筆記相關(guān)的活動(dòng)很多,我覺得以下兩種活動(dòng)的效果還是很不錯(cuò)的: 第一,在班上可以搞“讀書筆記”展示評比活動(dòng)。把班級(jí)中所有學(xué)生的讀書筆記都展示出來,讓學(xué)生評出最優(yōu)秀的讀書筆記,教師給予適當(dāng)?shù)莫?jiǎng)勵(lì)。在這一活動(dòng)過程中,落后的學(xué)生看到了優(yōu)秀的讀書筆記,會(huì)下決心向他們學(xué)習(xí);優(yōu)秀的學(xué)生因?yàn)橥瑢W(xué)的敬佩而會(huì)更加努力地把讀書筆記做好。 第二,在班上搞一些讀書活動(dòng)。根據(jù)讀書筆記的內(nèi)容,讓學(xué)生誦讀摘抄的精彩段落,介紹圖書的內(nèi)容或講故事,談讀書后的感想,告訴同伴做了讀書筆記以后的收獲等。在這樣的活動(dòng)中,不管是交流的還是傾聽的學(xué)生,都會(huì)切身體會(huì)到“讀書做筆記”的作用,從而使交流活動(dòng)變成學(xué)生今后認(rèn)真做讀書筆記的“動(dòng)力源”,最終養(yǎng)成做讀書筆記的好習(xí)慣。 第三,鼓勵(lì)學(xué)生參加比賽。在去年12月份舉行的校園文化藝術(shù)節(jié)中,我讓全班學(xué)生都寫了讀后感,最后選了5篇讀后感交到教務(wù)處。結(jié)果,我們班有4篇讀后感被張貼出來。那四個(gè)同學(xué)非常的高興,自信心得到了增強(qiáng),同時(shí)也激發(fā)了寫讀書筆記的興趣。 總之,只要讓學(xué)生明確寫讀書筆記的重要意義,教給學(xué)生寫讀書筆記的方法,想辦法培養(yǎng)學(xué)生寫讀書筆記的興趣,就有希望 培養(yǎng)起學(xué)生寫讀書筆記的習(xí)慣。不過,這個(gè)過程是比較緩慢的,需要我們持之以恒,否則,培養(yǎng)學(xué)生做讀書筆記的習(xí)慣就會(huì)成為一句空話。 手工制作感恩卡 重陽節(jié)制作感恩卡 第二篇:應(yīng)用Scratchbox構(gòu)建基于CF卡的嵌入式linux系統(tǒng)
第三篇:如何制作讀書筆記卡
第四篇:手工制作感恩卡
第五篇:重陽節(jié)制作感恩卡