【文章內容簡介】
cumentation/。 現(xiàn)在可以自己交叉編譯一些小程序,然后拷貝到主機的~/rootfs目錄,我們可以立刻在開發(fā)板上運行該程序,而不需要重新下載和燒寫了。 配置YAFFS文件系統(tǒng)cramfs是只讀文件系統(tǒng),在Flash上壓縮存儲,解壓并加載到RAM運行。由于只讀因而功能上很受限制,但可以保護系統(tǒng)文件不被意外的寫操作損壞。實際產品往往配置兩個Flash分區(qū),一個只讀分區(qū)用于存放系統(tǒng)文件(程序文件和庫文件),另一個可寫分區(qū),采用JFFS或YAFFS文件系統(tǒng),用于存放應用程序數(shù)據(jù),為了簡便起見,我們只分一個區(qū),使用可寫的YAFFS文件系統(tǒng)。注意,完成這個實驗之前先要完成上一節(jié)內容,能啟動到nfs根文件系統(tǒng)。 首先用NFS方式啟動系統(tǒng)。YAFFS文件系統(tǒng)和我們熟悉的ext2不同,不需要格式化,只需要全部擦除就可以用了。用根文件系統(tǒng)中的flash_eraseall命令擦除root分區(qū)并mount上來。以下命令在開發(fā)板上執(zhí)行 flash_eraseall /dev/mtd2Erasing 16 Kibyte @ 6b8000 10 % plete.Skipping bad block at 0x006bc000Erasing 16 Kibyte @ 3dfc000 99 % plete. mount t yaffs /dev/mtdblock2 /mntyaffs: dev is 32505859 name is mtdblock2yaffs: Attempting MTD mount on , mtdblock2block 432 is bad ls /mntlost+foundflash_eraseall命令是從mtd項目( )的源代碼中交叉編譯得來的。 現(xiàn)在可以把根文件系統(tǒng)中的所有文件拷貝到Flash分區(qū)。以下命令在開發(fā)板上執(zhí)行: cp a bin etc lib linuxrc opt sbin srv tmp usr /mnt/ mkdir p /mnt/proc /mnt/sys /mnt/dev /mnt/mnt /mnt/var/run mknod /mnt/dev/console m 600 c 5 1 mknod /mnt/dev/null m 666 c 1 3 umount mnt reboot注意:像/proc、/sys這樣正mount著特殊文件系統(tǒng)的目錄和/dev目錄下的設備文件一定不可以用cp命令拷貝。/mnt目錄顯然也不能拷貝。這些目錄和設備文件需要手動創(chuàng)建。 重啟目標系統(tǒng)之后進入Uboot,修改內核啟動參數(shù)使之從ext2分區(qū)啟動即可(如果下次還用NFS啟動,這里就不save了): AKAE2440 set bootmode nandAKAE2440 set root /dev/mtdblock2AKAE2440 set bootargs noinitrd rootfstype=yaffs rw console=ttySAC0,115200AKAE2440 saveAKAE2440 reset現(xiàn)在試試能不能修改Flash根文件系統(tǒng)中的文件。 將內核釋放到~/ ~$ tar xf 進入內核目錄: ~$ cd (本開發(fā)板不用修改makefile,打補丁時就會自動修改)首先修改Makefile,找到 ARCH ?= $(SUBARCH)CROSS_COMPILE ?=改為 ARCH ?= armCROSS_COMPILE ?= armlinux注意ARCH ?=arm后面不能有空格,要確??崭褚褎h除干凈,并且不要漏了armlinux末尾的“”。下面對內核打patch(注意打patch不要重復打): ~/$ patch p1 ../然后以內核源代碼自帶的smdk2440基本配置文件為基礎,使用menuconfig定制內核(確認你的主機安裝了libncursesdev軟件包)。 ~/$ cp arch/arm/configs/akae2440_defconfig .config~/$ make menuconfig查看配置菜單中的如下選項(有些已經默認選中): 在Floating point emulation中選擇NWFPE math emulation。由于ARM920T沒有浮點協(xié)處理器,浮點數(shù)指令需要用其它指令仿真實現(xiàn)。 有兩種方法可以仿真浮點指令:一種方法如先前所說的,使交叉編譯器支持softfloat,也就是一遇到C代碼里的浮點運算就自動生成仿真指令,另一種方法是交叉編譯器仍然生成浮點運算指令(對于ARM平臺是指協(xié)處理器指令),然而ARM920T沒有浮點協(xié)處理器,無法識別浮點指令,因而產生undefined異常,這個Floating point emulation內核選項就是在undefined異常的處理函數(shù)中仿真實現(xiàn)浮點運算。也就是說,這里我們使用非softfloat的交叉編譯器并在內核中實現(xiàn)浮點仿真。這樣的運行效率比使用softfloat編譯要低,因為每次浮點運算都需要處理異常和進入內核,但是兼容性好,便于我們利用別人已編譯好的程序。 選中File systems Pseudo filesystems /proc file system support。 Sysctl support (/proc/sys)。 sysfs file system support 和Virtual memory file system support (former shm fs)。 Tmpfs POSIX Access control Lists。 /proc file system(或者叫procfs)是內核提供給用戶程序的接口,很多Linux程序都需要在procfs中讀寫數(shù)據(jù),比如busybox,因此這個選項一般是不能少的。Virtual memory file system(或者叫tmpfs)用于內存虛擬磁盤,后面我們在做根文件系統(tǒng)時要mount一個tmpfs到/dev目錄下。 不需要改變Boot options Default kernel mand string,因為bootloader中的內核啟動參數(shù)會取代這里的設置。 選中Device Drivers Network device support Ethernet (10 or 100Mbit) CS8900A support,添加對網卡芯片的支持。在File systems Network File Systems菜單中選上NFS client support;NFS client support for NFS version3;NFS client support for the NFSv3 ACL protocol extension和Root file system on NFS。 選中Device Drivers Memory Technology Devices (MTD) MTD partitioning support,在Device Drivers Memory Technology Devices (MTD),選中NAND Device Support和它下面的NAND Flash support for S3C2410/S3C2440 SoC。 S3C2410 NAND driver debug,不要選擇S3C2410 NAND Hardware ECC,因為S3C2410硬件生成ECC碼的算法和我們所需要的不一致。 在File systems Miscellaneous filesystems中選中YAFFS2 file system support。 Auto select yaffs2 format。 cache short names in RAM, 再選上Compressed ROM file system support (cramfs)。 在Device Drivers Graphics support中選中Support for frame buffer devices, 再選中它下面的Enable firmware EDID。 Enable video Mode Handling Helpers。 S3C2410 LCD framebuffer support,不選擇Virtual Frame Buffer support因為它是一個用于調試的虛擬設備驅動而不是實際硬件的驅動。如果還選中了Bootup Logo,那么在內核啟動過程中初始化framebuffer時會在屏幕上看到Linux的企鵝logo,這是測試framebuffer驅動是否正常工作最直接的方法。Bootup Logo有三種規(guī)格,我們的開發(fā)板支持VGA輸出,可以選擇224色的漂亮logo。 在 Device Drivers USB support中選中Support for Hostside USB,然后選擇OHCI HCD support,在Device Drivers Input devi