Linux移植實驗指導書-112_第1頁
Linux移植實驗指導書-112_第2頁
Linux移植實驗指導書-112_第3頁
Linux移植實驗指導書-112_第4頁
Linux移植實驗指導書-112_第5頁
已閱讀5頁,還剩22頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、Linux移植課實驗指導書1 系統開發環境的安裝和設置1.1 實驗中所需要的主要軟件包實驗中涉及到的軟件包主要有如下的一些:l arm-none-linux-gnueabi.tar.bz2:編譯uboot,核心以及busybox所需要的工具鏈。l uboot-1.1.6_akae24xx.tar.gz:針對akae2410和akae2440開發板移植的ubootl kernel-2.6.27-android.tar.gz:支持akae2410和akae2440開發板的Linux核心,版本為2.6.27,并且內部也包括了google的android平臺上需要的驅動l Linux-2.6.27.t

2、ar.gz:從Linux官方()下載的2.6.27的Linux核心,主要用于在其中加入對akae2410和akae2440開發板的支持的實驗l testinit.c:用于測試小系統的小程序l busybox-1.1.3.tar.bz2和busybox_config:busybox和其配置文件1.2 工具鏈的安裝和設置設目前的用戶名為akaedu,在home目錄下,主要的步驟為:1. 建立一個工作目錄名稱為Linux-porting,并將工具鏈的壓縮包拷貝到該目錄下mkdir Linux-porting2. 將arm-none-linux-gnueabi.tar.bz

3、2解壓到該目錄下tar -jxvf arm-none-linux-gnueabi.tar.bz2 -C /home/akaedu/Linux-porting3. 設置工具鏈的路徑,將工具鏈的可執行程序路徑加到PATH環境變量中,注意這個設置在退出終端后就沒有了,所以每次啟動終端的時候都應該執行一次該命令export PATH=$PATH:/home/akaedu/Linux-porting/ arm-2008q3/bin/4. 測試工具鏈是否能正常工作,如果一切正常,應該能顯示該工具鏈的相關信息arm-none-linux-gnueabi-gcc -v1.3 TFTP和 NFS的配置1.3.1

4、 TFTP的配置1. 首先需要安裝tftpd的相關軟件包$ sudo apt-get install xinetd tftpd tftp2. 設置xinetd的tftp服務,具體為在/etc/xinetd.d/目錄下創建一個tftp文件,并將如下的內容拷貝到該文件中service tftpprotocol = udpport = 69socket_type = dgramwait = yesuser = nobodyserver = /usr/sbin/in.tftpdserver_args = /tftpbootdisable = no這里的server_args 后面的參數tftpboot

5、為tftp的存取目錄3. 創建tftp文件的存取目錄tftpboot,并修改其目錄的權限$ sudo mkdir /tftpboot$ sudo chmod -R 777 /tftpboot$ sudo chown -R nobody /tftpboot4. 重啟xinetd服務$ sudo /etc/init.d/xinetd restart$ sudo ifconfig eth0 1 upxinetd 網絡服務集1.3.2 NFS的配置1. 首先需要安裝nfs服務的相關軟件包sudo apt-get install nfs-kernel-server2. 創建nfs的

6、存取目錄rootfs,并修改其目錄的權限$ sudo mkdir /rootfs$ sudo chmod -R 777 /rootfs$ sudo chown -R nobody /rootfs3. 配置要輸出的目錄,可以在 /etc/exports 文件中添加該目錄/rootfs *(rw,no_root_squash,subtree_check,async)4. 重新啟動nfs服務sudo /etc/init.d/nfs-kernel-server restart1.4 putty工具的安裝和配置putty是個簡單實用的終端工具,使用上也比minicom要方便一點首先需要安裝該工具sudo

7、 apt-get install putty然后啟動putty并進行相關的配置putty &注意connection type設置為serial,speed設置為115200,為該連接作一個命名,這里是akaedu-target,點擊save進行保存。用串口線將host和開發板連接,點擊putty上的open,同時啟動開發板,這個時候應該能進入vivi或u-boot的命令界面。見下圖所示 圖11 putty的配置2 u-boot試驗2.1 實驗2-1:編譯u-boot這里生成的u-boot可以有兩個不同的版本,一個是可以直接燒到開發板的NandFlash中并啟動的版本,另外一個可以通過

8、tftp加載到內存中運行的版本,主要用于u-boot的調試1. 首先解壓uboot,之前應確認系統已經正常的安裝了arm的工具鏈tar -zxvf uboot-1.1.6_akae24xx.tar.gzmake distclean不然出錯 先要distclean2. 進入uboot目錄對于2440開發板,輸入make akae2440_config對于2410開發板,輸入make akae2410_config3. 編譯可運行于NandFlash上的uboot首先確認includeconfigs目錄下的akae2410.h或akae2440.h中的代碼#if 0/* If we want to

9、 start u-boot from usb bootloader in NOR flash */#define CONFIG_SKIP_RELOCATE_UBOOT1#defineCONFIG_SKIP_LOWLEVEL_INIT1#else/* If we want to start u-boot directly from within NAND flash */#define CONFIG_S3C2410_NAND_BOOT1#define CONFIG_S3C2410_NAND_SKIP_BAD1#endif如果#if為1,則以調試方式對uboot進行調試,否則代表可以將uboot燒

10、到flash上啟動,這里需要確認#if為0。這里的定義主要用于控制在cpu/arm920t/start.S中的代碼在啟動的時候是否從NANDflash上讀取u-boot代碼到內存中執行。保存文件退出后,在命令行上輸入make進行編譯$ make編譯完成后,在目錄下應該能生成一個u-boot.bin,將該文件拷貝到tftp的導出目錄中并重命名 $ sudo mv u-boot.bin /tftpboot/u-boot-nand.bin4. 編譯可以運行在內存中可以進行調試的u-boot首先確認include/configs目錄下的akae2410.h或akae2440.h中的代碼#if 1/*

11、If we want to start u-boot from usb bootloader in NOR flash */#define CONFIG_SKIP_RELOCATE_UBOOT1#defineCONFIG_SKIP_LOWLEVEL_INIT1#else/* If we want to start u-boot directly from within NAND flash */#define CONFIG_S3C2410_NAND_BOOT1#define CONFIG_S3C2410_NAND_SKIP_BAD1#endif保存文件退出后,在命令行上輸入make進行編譯將#

12、if設置為1,保存后退出,然后在命令行輸入$ make clean$ make TEXT_BASE=0x33000000編譯完成后在目錄下同樣會生成一個u-boot.bin的文件,將該文件拷貝到tftp的導出目錄中并重命名 $ sudo mv u-boot.bin /tftpboot/u-boot-ram.binJflash t= flash類型 d=延時2.2 實驗2-2:調試并燒寫u-boot2.2.1 將調試版本的u-boot加載到內存中運行如果開發板上裝有vivi的情況下可以利用vivi的load和go命令來進行,這里介紹的是利用u-boot的功能來加載u-boot的方法。首先應該確認

13、主機上的tftp的配置已經完成,具體的配置可以參考1.3.1節的介紹。具體的步驟如下:1. 對uboot的ip進行配置,這里設主機的ip為1(sudo ifconfig eth0 1),分配給開發板的ip為2 ,則應該在u-boot的命令行上輸入setenv ipaddr 2setenv netmask setenv serverip 1saveenv可以利用printenv來查看所設置的env是否正確,整個過程如下圖所示圖21 u-boot的env設置2.

14、確定主機和開發板之間的網線連接正確,這可以利用u-boot中的ping命令進行驗證 ping 13. 確定之前的u-boot-ram.bin拷貝到tftp的導出目錄tftpboot中sudo cp u-boot-ram.bin /tftpboot4. 利用tftp命令將u-boot-ram.bin加載到0x33000000上tftpboot 0x33000000 u-boot-ram.bin5. 利用go命令跳轉到加載的u-boot上執行go 0x33000000整個過程如下圖所示圖22 tftp加載u-boot的過程2.2.2 將uboot燒到開發板的Nandflash

15、中這里介紹通過u-boot的命令將u-boot燒寫到NandFlash上的方法1. 首先通過tftp將u-boot的nand版本加載到內存,這里設為0x32000000tftpboot 0x32000000 u-boot-nand.bin2. 在寫入NandFlash前應先將Flash地址0x0上的內容擦除nand erase 0x0 0x500003. 將內存中的u-boot-nand.bin寫到Flash中nand write 0x32000000 0x0 0x500004. 輸入reset重啟開發板reset整個過程如下圖所示圖23 u-boot的燒入過程 2.3 實驗2-3:利用實現的

16、myboot命令啟動Linux核心 1. 按照實驗3-1的描述編譯并生成一個Linux核心,并將生成的核心zImage放到tftp的配置目錄/rootfs中sudo cp zImage /tftpboot2. 利用tftpboot命令將zImage通過網絡加載到內存0x30008000tftpboot 0x30008000 zImage3. 利用myboot命令將引導核心myboot 0x30008000出現Uncompressing Linux. done, booting the kernel. 錯誤解決方法:MACHINE_START(AKAE2440, "AKAE2440&q

17、uot;)/此處標識修改整個過程見下圖所示圖24 利用myboot命令引導核心文字 1: 圖15 利用myboot命令引導核心3 Linux核心移植試驗3.1 實驗3-1:編譯和配置Linux核心(24xx平臺)1. 首先解壓核心的壓縮包kernel-2.6.27-android.tar.gz,編譯的時候應確認系統已經正常的安裝了arm的工具鏈tar -zxvf kernel-2.6.27-android.tar.gzcd kernel-2.6.27-android2. 導出核心編譯的時候需要的兩個環境變量ARCH和CROSS_COMPILE注意這個設置在退出終端后就沒有了,所以每次啟動終端的

18、時候都應該執行一次該命令export ARCH=arm /ARCH體系結構export CROSS_COMPILE=arm-linux- 交叉編譯器注意:arm 和arm-linux- 后面不能有空格3. 如果不愿意每次都輸入,可以直接修改核心的根目錄下的Makefile,將第197行這兩個環境變量修改為ARCH = armCROSS_COMPILE = arm-linux-4. 在核心的目錄下輸入make menuconfig進行配置找到arch/arm/configs 目錄下的Mini2440-deconfig 或者 smdk2440-deconfig 為模板進行裁剪。cp arch/ar

19、m/configs/mini2440-deconfig .configmake menuconfig必須打開 Kernel Features -> EABI (這個選項可以根據GCC版本決定,如果選用的GCC版本不支持EABI,則不用選)。進入menuconfig后要先在systemtype->arm systemtype->samsung.配置的時候應該要選中akae2410和akaed2440,如果一切正常的話選擇應該是在System type-> S3C2410 Machines或System type-> S3C2440 Machines這兩個選擇項中,可

20、以參考下圖的選擇,這里是AKAE2410 或者AKAE2440圖31 akae2410的選擇核心的配置過程中,其它選項要求1. ext2文件系統支持2. nfs文件系統的支持3. ramdisk支持4. initrd支持5. ext2文件系統的支持在Filesystems選項中,如下圖所示圖32 ext2文件系統的支持NFS文件系統的支持也在File systems選項中,它的選項要更深一級,請注意一定要選中”Root file system on NFS”這一項,并且要先選中Networking support->Networking options->IP:kernel lev

21、erl autoconfiguration,否則沒有Root file system on NFS 選項。如下圖所示圖33 NFS文件系統的支持initrd的支持在General setup選項中,如下圖所示圖34 initrd的支持ramdisk的支持在 Device Drivers->Block devices選項中,如下圖所示圖35 ramdisk的支持目錄arch/arm/configs/下有一個akae24xx_config是一個參考配置,可以直接拷貝到核心根目錄下使用配置的是哪一個就需要拷貝哪一個mini2440/cp arch/arm/configs/akae24xx_co

22、nfig ./.config5.6. 輸入make編譯核心make輸入make V=1可以查看編譯核心的時候使用的編譯選項等,對解決核心的編譯問題有一定的幫助。 出現error: 'PCIMEM_BASE' undeclared (first use in this function) 此類錯誤drivers/video/console/vgacon.c:292: error: PCIMEM_BASE ' undeclared (first use in this function) 解決方法:device drivers->Graphics support-&g

23、t;Console display driver support-> VGA text console /由于電腦顯卡需要PCI總線,所以要取消出現錯誤ERROR: "ioport_map" drivers/net/wireless/orinoco/spectrum_cs.ko undefined!解決方案:首先把wirless中大多數選項取消,如果出現如下錯誤ERROR: "ioport_map" drivers/char/tpm/tpm_atmel.ko undefined!在device drivers->character devic

24、es->取消 TPM hardware3.2 實驗3-2:在官方的Linux核心上加入對akae24xx的支持3.2.1 akae2410平臺1. 首先在/arch/arm/mach-s2c2410目錄下編寫mach-akae2410.c,具體的模式可以參考kernel-2.6.27-android下的代碼,請按課程中講解的內容務必領會其中各個代碼的具體含義參考mini2440.c 或者smdk2440.c 復制兩個文件中的一個,改為自己需要的文件mach-akae2410.c做如下修改2. 修改時鐘頻率:static void _init smdk2440_map_io(void) s

25、3c24xx_init_io(smdk2440_iodesc, ARRAY_SIZE(smdk2440_iodesc); s3c24xx_init_clocks(12000000); s3c24xx_init_uarts(smdk2440_uartcfgs, ARRAY_SIZE(smdk2440_uartcfgs);其中smdk2440 這些名字可以不用改,但要保持函數里的命名 一致MACHINE_START(AKAE2440, "AKAE2440")/此處標識修改 /* Maintainer: Ben Dooks <> */ .phy

26、s_io = S3C2410_PA_UART, .io_pg_offst = (u32)S3C24XX_VA_UART) >> 18) & 0xfffc, .boot_params = S3C2410_SDRAM_PA + 0x100, .init_irq = s3c24xx_init_irq, .map_io = smdk2440_map_io, .init_machine = smdk2440_machine_init, .timer = &s3c24xx_timer,MACHINE_END 3. 修改Kconfig和Makefile,在Kconfig中加入co

27、nfig MACH_AKAE2410bool "AKAE2410"select CPU_S3C2410select S3C_DEV_USB_HOSTselect S3C_DEV_NANDhelp Say Y here if you are using the akaedu 2410 board在Makefile中加入obj-$(CONFIG_MACH_AKAE2410)+= mach-akae2410.o可以參考kernel-2.6.27-android目錄下的相關文件4. 在/arch/arm/tools的mach-types文件中的最后一行加入對AKAE2410的支持a

28、kae2410MACH_AKAE2410AKAE24101874 (此值由bootloader寫定)5. 按照實驗3-1的說明對核心進行配置,如果正常的話,在核心的菜單中應該能看到實驗3-1的圖中的選項,選中aka2410。核心的配置同樣要保證對ext2文件系統,ramdisk和initrd的支持3.2.2 akae2440平臺基本的過程和akae2410平臺的一致,修改和添加的文件應該在/arch/arm/mach-s2c2440目錄下進行,在/arch/arm/tools的mach-types文件中的最后一行加入對AKAE2440的支持為:akae2440MACH_AKAE2440AKAE

29、24401875 (此值由bootloader寫定)1 添加nand flash 分區信息 (和u-boot分區信息保持一致)static struct mtd_partition akae2440_default_nand_part _initdata = 0 = .name= "u-boot",.size= 0x00100000,.offset= 0x00000000,1 = .name= "kernel",.size= 0x00200000,.offset= 0x00100000,2 = .name= "ext2",.size=

30、 0x01000000,.offset= 0x00300000,3 = .name= "temp",.offset= 0x01300000,.size= 0x02d00000,;static struct s3c2410_nand_set akae2440_nand_sets _initdata = 0 = .name= "nand",.nr_chips= 1,.nr_partitions= ARRAY_SIZE(akae2440_default_nand_part),.partitions= akae2440_default_nand_part,.fl

31、ash_bbt = 1, /* we use u-boot to create a BBT */,;static struct s3c2410_platform_nand akae2440_nand_info _initdata = .tacls= 0,.twrph0= 25,.twrph1= 15,.nr_sets= ARRAY_SIZE(akae2440_nand_sets),.sets= akae2440_nand_sets,.ignore_unset_ecc = 1,;在static void _init akae2440_machine_init(void)中添加s3c_nand_s

32、et_platdata(&akae2440_nand_info);在static struct platform_device *akae2440_devices _initdata中添加&s3c_device_nand,3.2.3 編譯核心可以按照實驗3-1的說明對核心進行編譯,編譯后生成的zImage同樣也放到tftp的導出目錄tftpboot下,然后利用燒寫在板子上的u-boot按照實驗2-3介紹的方法對這個核心進行引導和測試。3.3 實驗3-3:生成ext2文件系統1. 首先利用dd命令產生一個image文件,注意大小不要超過6Msudo dd if=/dev/zero

33、 of=ext2fs.img bs=1k count=6144 messagedd 是 Linux/UNIX 下的一個非常有用的命令,作用是用指定大小的塊拷貝一個文件,并在拷貝的同時進行指定的轉換。2. 然后將該image和環回設備連接在一起sudo losetup /dev/loop0 ext2fs.imglosetup用來將loop device與檔案或block device聯結、分離.以及查詢loop device目前的狀況3. 利用mke2fs對該image進行格式化 sudo mke2fs -m 0 /dev/loop0mke2fs建立ext2文件系統4. 新建一個目錄,并將該目錄

34、掛載到和image連接的環回設備上mkdir temp操作temp都是在讀寫ext2fs.imgsudo mount /dev/loop0 temp/5. 編寫想要核心運行的第一個程序程序為#include <stdio.h>int main(int argc, char * argv) int count = 0; while(1)printf("hello, my frist program, count=%dn", count+);sleep(1);6. 以靜態方式編譯該程序arm-none-linux-gnueabi-gcc -march=armv4t

35、-mtune=arm9tdmi -msoft-float -static -o testinit testmain.c /static靜態鏈接或者arm-none-linux-gnueabi-gcc -march=armv4t -mtune=arm9tdmi -static -o testinit testmain.c /static靜態鏈接7. 將編譯好的文件放在該temp目錄中,這里也就是這個testinitsudo cp testinit temp/8. 在temp目錄中創建目錄dev,并創建必要的設備文件sudo mkdir dev建立了DEV目錄后,把如下東西放到DEV目錄下sudo

36、 mknod console c 5 1sudo mknod ttySAC0 c 204 64sudo mknod ttySAC1 c 204 65sudo mknod ttyS0 c 4 64sudo mknod ttyS1 c 4 65sudo mknod tty1 c 4 1 sudo mknod mtdblock0 b 31 0 sudo mknod mtdblock1 b 31 1 sudo mknod mtdblock2 b 31 2 sudo mknod mtdblock3 b 31 3在此寫一個shell 通過 sh 來執行在temp文件中的操作其實就是在ext2fs.img9

37、. umount該temp目錄,并解除和image之間的環回連接sudo umount temp/sudo losetup -d /dev/loop0這個時候就得到了一個最小的文件系統,該文件系統中唯一的程序就是前面編寫好的testinit程序,后面的實驗中將讓核心在初始化的時候執行的第一個程序就是它。在uboot中設置環境變量setenv init /testinit /加載的程序saveenv3.4 實驗3-4:利用ramdisk實現該文件系統的掛載1. 在uboot中添加三個環境變量bootmode,init和rdsize,并分別將其設置為ramdisk,testinit和0x80000

38、0setenv bootmode ramdisk /用內存模擬磁盤(文件系統)setenv init /testinit /加載的程序setenv rdsize 0x800000 /加載大小setenv bootargs root=/dev/ram0 rw console=ttySAC0,115200 /設置根文件系統為ramdisksaveenv2. 將前面實驗中得到的ext2fs.img拷貝到tftp的導出目錄tftpboot下sudo cp ext2fs.img /tftpboot3. 利用tftpboot命令將核心和ext2fs.img加載到內存的0x30008000和0x308000

39、00這兩個地方tftpboot 0x30008000 zImagetftpboot 0x30800000 ext2fs.img4. 利用myboot程序引導核心, 這個時候應該可以看到系統的第一個進程,也就是testinit打印的字符myboot 0x30008000文件系統找不到是uboot傳遞參數不對 在arch/arm/plat-s3c24xx下面的common-smdk.c作mtd_partition的修改文件系統必須用整個過程如下圖所示圖36 ramdisk文件系統加載3.5 實驗3-5:編譯和制作busybox小系統 1. 將前面的ext2fs.img重新mount到temp目錄上

40、sudo mount -o loop ext2fs.img temp/2. 將busybox解壓tar jxvf busybox-1.1.3.tar.bz23. 將busybox_config拷貝到解開的目錄中并命名為.configcp busybox_config busybox-1.1.3/.config4. 對busybox進行配置cd busybox-1.1.3make menuconfig配置的時候有如下的幾個要點:/home/akaedu/linux-porting/arm-2010q1/binl 注意將安裝目錄設置為temp目錄,必須是絕對路徑,這個設置Busybox Setti

41、ngs-> Installation Options中l Busybox Settings-> Build Options 中的設置為Build BusyBox as a static binary選上Cross Compiler prefix應該設置為arm-none-linux-gnueabi-Any extra CFLAGS options for the compiler設置為-march=armv4t -mtune=arm9tdmi -msoft-float如下圖所示圖37 busybox的設置可以參考busybox_config中的配置5. 完成后進行對busybox進

42、行安裝,完成后在temp目錄下應該可以看到幾個目錄和相應的程序make defconfig/默認設置sudo make install (或者sudo PATH=$PATH:/opt/FriendlyARM/toolschain/4.4.3/bin make install)6. 完成后將temp目錄進行umountsudo umount temp3.6 實驗3-6:引導busybox小系統1. 前面實驗中得到的ext2fs.img拷貝到tftp的導出目錄tftpboot下sudo cp ext2fs.img /tftpboot2. 修改先前設置的uboot參數init將其修改為/bin/sh

43、setenv init /bin/shsaveenv3. 利用tftpboot命令將核心和ext2fs.img加載到內存的0x30008000和0x30800000這兩個地方tftpboot 0x30008000 zImagetftpboot 0x30800000 ext2fs.img4. 利用myboot加載Linux核心,加載成功后可以看到系統的標準shell界面3.7 實驗3-7:在核心中添加網絡的功能,實現nfs方式的掛載核心中的代碼已經有對cs8900芯片的支持,只需要對driver/net目錄下的cs89x0.c代碼作一定的修改就可以支持我們的開發板。可以使用diff命令將kern

44、el-2.6.27-android.tar.gz和標準核心Linux-2.6.27.tar.gz中的cs89x0.c作一個對比,可以查看該文件的差異。理解這些差異,并將這些修改添加到標準核心Linux-2.6.27.tar.gz中并編譯。查看掛載是否成功用 :sudo mount -t nfs 1:/rootfs /home/akaedu/tntdrive/net 目錄下修改cs89x0.c1. 在開始定義的時候,添加對板子網卡的支持#elif defined(CONFIG_MACH_AKAE2440)#include<asm/irq.h>static uns

45、igned int netcard_portlist _initdata= 0xe0000300, 0;static unsigned int cs8900_irq_map = IRQ_EINT9, 0, 0, 0;2.設置MAC地址在init cs89x0_probe1 中添加dev->dev_addr0 = 0x00;dev->dev_addr1 = 0x00;dev->dev_addr2 = 0xc0;dev->dev_addr3 = 0xff;dev->dev_addr4 = 0xee;dev->dev_addr5 = 0x08;set_mac_ad

46、dress(dev,dev->dev_addr);3. 在net_open 中找到#ifndef CONFIG_CS89x0_NONISA_IRQ 注釋掉改為#if !defined(CONFIG_MACH_AKAE2440)在接下來的位置 添加#ifdef CONFIG_MACH_AKAE2440set_irq_type(dev->irq,IRQ_TYPE_EDGE_RISING);#endif 并且在頭文件的位置 添加 #include<linux/irq.h>4. 在mach-akae2440.c文件中 在static struct map_desc akae24

47、40_iodesc _initdata里添加 /* cs8900 IO Space map */ .virtual = 0xe0000000,.pfn = _phys_to_pfn(S3C2410_CS3+0x01000000), .length = SZ_1M,.type = MT_DEVICE 5.如果make menuconfig 選項中沒有CS89x0選項 ,修改drivers/net/Kconfig 文件找到config CS89x0 注釋掉下面的depends 一行文字。或者復制config CS89x0那段而后修改config CS89x0 (此處若要改為別的名字,則要改很多地方

48、)tristate "MY_CS89x0 support"depends on NET_ETHERNET | (ISA | EISA | MACH_IXDP2351 | ARCH_IXDP2X01 | ARCH_PNX010X | MACH_AKA2440)6.make menuconfig 在device Drivers->Network device support->Ethernet(10 or 100 Mbit)選上MY_CS89x0完成后可以通過nfs方式對Linux小系統進行掛載,主要的過程如下:1. 參考1.3.2節中的方法對NFS進行配置2. 按

49、照實驗3-5的方法對busybox進行編譯和配置,只是注意在設置安裝路徑的時候應該設置成NFS的導出目錄/rootfs3. 按照實驗3-5的方法對busybox進行安裝sudo make install 在rootsf目錄下要建立/dev文件mknod console c 5 14. 啟動開發板,設置如下的一些環境變量setenv bootmode nfssetenv gateway 1setenv nfsroot /rootfs/nfsroot 是NFS是在那里/root 是文件系統的根 從何處開始/root = /dev/nfs /這只是一個標識不是實際存在savee

50、nv5. 利用tftpboot命令將核心加載到內存的0x30008000處,并使用myboot引導核心tftpboot 0x30008000 zImagemyboot 0x300080003.8 實驗3-8:將核心燒寫到Flash中,實現系統自啟動1. 重新編譯一個nand版本的u-boot,注意CONFIG_BOOTCOMMAND的設置為:#define CONFIG_BOOTCOMMAND "nand read 0x30008000 kernel 0x00200000; myboot 0x30008000"這是在u-boot啟動的時候自動會執行的命令序列,以分號隔開。這

51、里也就是將核心從kernel分區中讀出后通過myboot命令進行引導2. 將生成的u-boot按照實驗2-2的方法燒到開發板上并重新啟動開發板3. 輸入mtdparts default設置默認的分區,并保存環境變量mtdparts default這個時候輸入printenv應該能看見默認的分區saveenv4. 將該核心通過tftpboot命令加載到內存的0x32000000的位置tftpboot 0x32000000 zImage5. 將加載的核心燒到開發板的分區kernel上nand erase kernel 0x200000 /flash必須先擦后寫nand write 0x320000

52、00 kernel 0x2000006. 重新啟動開發板,等待5秒后系統就能自動啟動起來3.9 實驗3-9: 制作一個通過init進程啟動的小系統1. 在rootfs目錄下建立一個目錄名為etc,并在該目錄下創建目錄init.dmkdir /rootfs/etcmkdir /rootfs/etc/init.d2. 在目錄etc下創建文件inittab,內容為::sysinit:/etc/init.d/rcSttySAC0:respawn:-/bin/shtty1:respawn:-/bin/shtty2:askfirst:-/bin/sh:ctrlaltdel:/bin/umount -a -

53、r3. 在目錄init.d下創建文件rcS,這是一個shell腳本,內容為:#! /bin/sh# Set the pathPATH=/bin:/sbin:/usr/bin:/usr/sbinexport PATH# Set the hostname.hostname -F /etc/HOSTNAME# mount proc and devpts filesystem/bin/mount -amount -t tmpfs mdev /devmdev -s#mount -o remount,rw /dev/root /#mount -n / -o rw,remountmount -t proc

54、/proc /procmount -t ramfs none /tmp#mount /dev/ptsif ! -f /etc/HOSTNAME ; then echo $HOSTNAME > /etc/HOSTNAMEfi4. 起動開發板,設置環境變量init為/bin/init5. 設置環境變量bootmode為nfssetenv bootmode nfssetenv init /bin/init6. 通過tftpboot加載核心,利用myboot引導該核心并掛載nfs文件系統tftpboot 0x30008000 zImagemyboot 0x300080007. 可以利用實驗3-8的方法將修改燒到flash上,完成系統的自啟動sudo ln -s busybox init /必須鏈接下面是編譯內核驅動要用到的:可以先不管 #!不是注釋 mount -a mount -t proc /proc

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論