linux系统移植实验手册.docx
- 文档编号:5337257
- 上传时间:2022-12-15
- 格式:DOCX
- 页数:24
- 大小:29.02KB
linux系统移植实验手册.docx
《linux系统移植实验手册.docx》由会员分享,可在线阅读,更多相关《linux系统移植实验手册.docx(24页珍藏版)》请在冰豆网上搜索。
linux系统移植实验手册
实验四Linux-2.6.14内核移植--网卡驱动的添加
【实验目的】
本实验通过在上个实验结果的linux2.6.14内核上移植CS89900A网卡驱动,使其可以通过网络nfs的方式挂载在ubantu主机环境上的文件系统,从而实现linux系统的完全启动。
【实验环境】
1、Ubuntu7.0.4发行版
2、GEC2410平台以及开发板中移植好的u-boot
3、交叉编译器arm-linux-gcc
【实验步骤】
(1)下载linux内核http:
//www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.14.1.tar.bz2,下载linux2.6.14内核致/source/kernel目录,如果没有/source/kernel目录,自行建立目录。
root@:
/source/kernel#cd/source/kernel/
root@:
/source/kernel#tar-xjvflinux-2.6.14.tar.bz2
root@:
/source/kernel/linux-2.6.14#pwd
/source/kernel/linux-2.6.14
root@:
/source/kernel#cdlinux-2.6.14
进入内核解压后的目录,以后示例中,只要是相对路径全部是相对于/source/kernel/linux-2.6.14这个目录。
(2)修改Makefile文件
修改内核目录树根下的的Makefile,指明交叉编译器:
root@:
/source/kernel/linux-2.6.14#vimMakefile
找到ARCH和CROSS_COMPILE,修改
ARCH=arm
CROSS_COMPILE=arm-softfloat-linux-gnu-
保存退出,然后设置你的PATH环境变量,使其可以找到你的交叉编译工具链:
root@:
/source/kernel/linux-2.6.14#echo$PATH
:
/usr/local/sbin:
/usr/local/bin:
/usr/sbin:
/usr/bin:
/sbin:
/bin:
/usr/games
如果第一个路径为/home/linux/crosstool/gcc-3.4.5-glibc-2.3.6/arm-softfloat-linux-gnu/bin,则不用再进行设置,如果不是则进行下面步
骤进行设置:
root@:
/source/kernel/linux-2.6.14#
exportPATH=$PATH:
/home/linux/crosstool/gcc-3.4.5-glibc-2.3.6/arm-softfloat-linux-gnu/bin:
(动态加载环境变量,终端关闭后,自己所加载的环境变量立即消失)。
或者修改./bashrc文件:
(静态加载环境变量,不随终端的关闭而消失)
root@:
/source/kernel/linux-2.6.14#vim~/.bashrc在文件最后添加
exportPATH=$PATH:
/home/linux/crosstool/gcc-3.4.5-glibc-2.3.6/arm-softfloat-linux-gnu/bin:
再重新登陆:
root@:
/source/kernel/linux-2.6.14#su–
下面的所有操作都在上个实验结果的linux2.6.14内核源码目录中,可以参考前面的实验。
(3)添加网卡驱动到内核
将cs8900a.h和cs8900a.c文件拷贝到内核代码目录drivers/net中:
linux@:
/source/kernel/linux-2.6.14$cp/mnt/hgfs/disk/cs8900a.*drivers/net
(4)修改Makefile和Kconfig文件
linux@:
/source/kernel/linux-2.6.14-$vimdrivers/net/Makefile
在文件中添加:
obj-$(CONFIG_CS8900a)+=cs8900a.o
(5)保存退出,修改Kconfig文件linux@:
/source/kernel/linux-2.6.14-$vimdrivers/net/Kconfig
在以下代码段下面
configDM9000
tristate"DM9000support"
dependsonARM&&NET_ETHERNET
selectCRC32
selectMII
---help---
SupportforDM9000chipset.
Tocompilethisdriverasamodule,chooseMhereandread
Documentation/networking/net-modules.txt>.Themodulewillbe calleddm9000. 加入以下信息: configCS8900a tristate"CS8900asupport"(注意开头使用TAB键,下同) dependsonARM&&NET_ETHERNET ---help--- Supportforcs8900achipset. Tocompilethisdriverasamodule,chooseMhereandread. (6)支持启动时挂载devfs 为了内核支持devfs以及在启动时并在/sbin/init运行之前能自动挂载/dev为devfs文 件系统,并且自动创建设备结点,修改fs/Kconfig文件: root@: /source/kernel/linux-2.6.14#vimfs/Kconfig 找到menu"Pseudofilesystems" 添加如下语句: configDEVFS_FS bool"/devfilesystemsupport(OBSOLETE)" defaulty configDEVFS_MOUNT bool"Automaticallymountatboot" defaulty dependsonDEVFS_FS (7)为网卡驱动添加头文件 #touchinclude/asm-arm/arch-s3c2410/smdk2410.h 在文件smdk2410.h中添加如下内容: #ifndef__ASM_ARCH_SMDK2410_H #define__ASM_ARCH_SMDK2410_H #include #definevSMDK2410_ETH_IO0xE9000000//网卡的虚拟地址 #definepSMDK2410_ETH_IO0x19000000//网卡的物理地址 #defineSMDK2410_ETH_IRQIRQ_EINT9//网卡中断号 #endif (8)建立网卡地址内存映射 root@: /source/kernel/linux-2.6.14#vimarch/arm/mach-s3c2410/mach-smdk2410.c 添加: #include staticstructmap_descsmdk2410_iodesc[]__initdata={ /*nothinghereyet*/ { vSMDK2410_ETH_IO,pSMDK2410_ETH_IO,SZ_1M,MT_DEVICE} }; (9)配置内核支持CS8900A网卡 root@: /source/kernel/linux-2.6.14#makemenuconfig Loadablemodulesupport---> [*]Enableloadablemodulesupport [*]Automatickernelmoduleloading Floatingpointemulation--->[*]NWFPEmathemulation//增加对NWFPE浮点运算库的支持 Filesystems--->//针对文件系统的设置 Pseudofilesystems---> [*]/procfilesystemsupport [*]Virtualmemoryfilesystemsupport(formershmfs) [*]/devfilesystemsupport(OBSOLETE) [*]Automaticallymountatboot(NEW) NetworkFileSystems---> <*>NFSfilesystemsupport//支持nfs文件系统 [*]RootfilesystemonNFS DeviceDrivers--->//配置网卡驱动: Networkdevicesupport---> [*]Networkdevicesupport Ethernet(10or100Mbit)---> [*]Ethernet(10or100Mbit) <*>CS8900asupport 保存退出,产生.config文件. (10)编译内核产生zImage文件,并将arch/arm/boot/zImge拷贝到/tftpboot目录中 (11)拷贝rootfs-.tar.gz到配置了tftp及nfs服务的ubantu7.04环境中 假定/source/rootfs为nfs的服务目录,则: root@: /source#cprootfs.tar.gz/source root@: /source#tarzxvfrootfs.tar.gz 在目录/souce/rootfs下存放着一个可用的文件系统(文件系统的实验在后面的实验中会涉及到)。 确保主机端tftp及nfs服务是开启的。 (12)修改内核启动参数 GEC2410#setenvbootcmdtftp30008000zImage\;go30008000 GEC2410#setenvbootargsroot=nfsnfsroot=192.168.1.23: /source/rootfsip=192.168 .1.134console=ttySAC0,115200init=/linuxrc GEC2410#saveenv (13)启动开发平台,在超级终端观察现象 GEC2410#boot 如果顺利,可以在串口终端显示linux命令行终端了! 实验五Linux-2.6.14内核移植--NandFlash驱动的添加 【实验目的】 本实验通过在上个实验结果的linux2.6.14内核上移植NANDFlash驱动,使其可以设别到NANDFlash分区,并可以管理相应的Flash设备。 从而进一步完善系统结构,并通过移植的过程来了解nandflash的移植方法。 【实验环境】 1、Ubuntu7.04发行版 2、GEC2410平台以及开发板中移植好的u-boot 3、交叉编译器arm-linux-gcc 【实验步骤】 在linux2.6.14内核中已经包含了s3c2410的nandflash控制器驱动,但需要做一些配置工作才能正常使用。 (1)指明分区信息,建立分区表 在arch/arm/mach-s3c2410/decs.c文件中,添加分区信息: #vimarch/arm/mach-s3c2410/devs.c 添加: #include #include #include staticstructmtd_partitionpartition_info[]={ { name: "u-boot",//名称 size: 0x40000,//大小 offset: 0,//偏移量 },{ name: "kernel", size: 0x001c0000, offset: 0x00040000, },{ name: "root", size: 0x02300000, offset: 0x00200000, },{ name: "user", size: 0x01B00000, offset: 0x02500000, } } //加入nandflash分区 structs3c2410_nand_setnandset={ nr_partitions: 4,//nr_partitions为分区数 partitions: partition_info,//partitions: partition_info为分区表 }; (2)建立nandflash硬件支持 structs3c2410_platform_nandsuperlpplatform={ tacls: 0, twrph0: 30, twrph1: 0, sets: &nandset, nr_sets: 1, }; /*这些参数的含义请参看s3c2410的关于NANDFLASH的datasheet*/ (3)加入nandflash芯片支持到nandflash驱动 修改此文件arch/arm/mach-s3c2410/devs.c中的s3c_device_nand结构体变量,添加对dev成员的赋值: structplatform_devices3c_device_nand={ .name="s3c2410-nand", .id=-1, .num_resources=ARRAY_SIZE(s3c_nand_resource), .resource=s3c_nand_resource, //在这添加如下代码: .dev={ .platform_data=&superlpplatform } }; /*id有效设备编号,如果只有一个定义为-1,如果有多个则从0开始计算,num_resource定义有几个NANDFLASH芯片资源,resouce定义NANDFLASH芯片资源的首地址。 */ (4)指定启动时初始化 kernel启动时依据我们对分区的设置进行初始配置,修改 arch/arm/mach-s3c2410/mach-smdk2410.c文件,具体操作如下: #vimarch/arm/mach-s3c2410/mach-smdk2410.c 修改smdk2410_devices[].指明初始化时包括我们在前面所设置的flash信息 staticstructplatform_device*smdk2410_devices[]__initdata={ &s3c_device_usb, &s3c_device_lcd, &s3c_device_wdt, &s3c_device_i2c, &s3c_device_iis, &s3c_device_nand,/*added*/ }; (5)配置MTD,具体操作如下 root@: /source/kernel/linux-2.6.14#makemenuconfig DeviceDrivers---> MemoryTechnologyDevices(MTD)---> [*]MTDpartitioningsupport NANDFlashDeviceDrivers---> <*>NANDDeviceSupport <*>NANDFlashsupportforS3C2410/S3C2440SoC 这些选项代表对NANDFLASH的操作。 (6)编译内核,并将arch/arm/boot/zImge烧写到开发板 (7)启动系统,在串口终端输入: /#cat/proc/mtd dev: sizeerasesizename mtd0: 0004000000004000"u-boot" mtd1: 001c000000004000"kernel" mtd2: 0230000000004000"cramfs" mtd3: 01b0000000004000"user_rootfs" 可以看到系统已经可以支持nandflash了。 实验六Linux-2.6.14内核移植--Yaffs2文件系统移植 【实验目的】 Yaffs2是一种专门为NANDFlash设计的可读写文件系统,本实验是在前面以上的实验的基础上,加入了对yaffs2的支持,从而进一步完善系统结构,通过移植的过程来了解yaffs2的移植方法。 【实验环境】 1、Ubuntu7.04发行版 2、GEC2410平台以及开发板中移植好的u-boot 3、交叉编译器arm-linux-gcc 【实验步骤】 (1)下载yaffs2源代码,下载地址为: http: //www.aleph1.co.uk/cgi-bin/viewcvs.cgi/yaffs2.tar.gz? view=tar 并假设将源代码放在/source/yaffs2/目录下。 在linux2.6.14源码树中fs目录下建立yaffs2文件夹,把yaffs2源码复制过去。 相关的命令如下: #mkdiryaffs2 #cdyaffs2/ #cp/source/yaffs/yaffs2/*.h./ #cp/source/yaffs/yaffs2/*.c./ #cp/source/yaffs/yaffs2/Makefile.kernel./Makefile #cp/source/yaffs/yaffs2/Kconfig./ (2)修改fs目录下的Makefile #vimMakefile 添加下面一行: obj-$(CONFIG_YAFFS_FS)+=yaffs2/ (3)修改fs目录下Kconfig: #vimKconfig 找到下面的代码: configUFS_FS_WRITE bool"UFSfilesystemwritesupport(DANGEROUS)" dependsonUFS_FS&&EXPERIMENTAL help SayYhereifyouwanttotrywritingtoUFSpartitions.Thisis experimental,soyoushouldbackupyourUFSpartitionsbeforehand. 添加下面一行: source"fs/yaffs2/Kconfig" endmenu 注意: 在Kconfig中添加的选项位置决定了配置内核时选项出现在那个层次目录中,为了保持配置选项目路结构清晰,source"fs/yaffs2/Kconfig"一定要添加在 menu"Miscellaneousfilesystems" ……………… endmenu 之间的位置上,如上所示添加在了endmenu行的上方,作为fs的最后一个选项。 (4)配置内核选项,目的是内核支持Yaffs2文件系统 Filesystems---> Miscellaneousfilesystems---> <*>YAFFS2filesystemsupport [*]Autoselectyaffs2format (5)编译内核,重新下载。 在终端下执行: /#cat/proc/filesystems nodevsysfs nodevrootfs nodevbdev nodevproc nodevsockfs nodevpipefs nodevfutexfs nodevtmpfs nodevinotifyfs nodeveventpollfs nodevdevpts ext2 cramfs nodevramfs nodevdevfs nodevnfs nodevnfsd romfs yaffs yaffs2 nodevrpc_pipefs 可以看出内核支持了多种文件系统,包括yaffs2。 (6)测试yaffs2文件系统 从nandflash移植实验中可以看出/dev/mtdblock/3是用户分区。 [root@192/]#mount-tyaffs2/dev/mtdblock/3/tmp 顺利的话,就可以在/tmp下,写入文件了。 重新启动、挂载yaffs2后,写入的文件仍然保存在flash上。 实验七Linux-2.6.14内核移植--添加USB设备驱动 【实验目的】 在GEC2410开发板上进行linux-2.6.14内核的移植,这个部分完成USB设备驱动的添加,完成相应的功能。 【实验环境】 1、Ubuntu7.04发行版 2、GEC2410平台以及开发板中移植好的u-boot 3、交叉编译器arm-linux-gcc 【实验步骤】 (1)配置2.6.14支持u盘 1. devicedrivers--->usbsupport---> <*>SupportforHost-sideUSB <*>OHCIHCDsupport <*>USBMassStoragesupport 这些配置是对host端和device端的支持. 2. SCSIdevicesupport---><*>SCSIdisksupport <*>SCSIgenericsupport <*>SCSImediachangersupport 这是对U盘的SCSI类型的支持 3. filesystem---->DOS/FAT/NTFilesystems---> <*>MSDOSfssupport <*>VFAT(Windows-95)fssupport (437)DefaultcodepageforFAT (iso8859-1)DefaultiocharsetforFAT 支持相应的文件系统 4. PartitionTypes--->[*]Advancedpartitionselection [*]PCBIOS(MSDOSpartitiontables)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- linux 系统 移植 实验 手册
![提示](https://static.bdocx.com/images/bang_tan.gif)