linux系统移植实验手册.doc_第1页
linux系统移植实验手册.doc_第2页
linux系统移植实验手册.doc_第3页
linux系统移植实验手册.doc_第4页
linux系统移植实验手册.doc_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验四 Linux-2.6.14内核移植-网卡驱动的添加【实验目的】本实验通过在上个实验结果的linux2.6.14内核上移植CS89900A网卡驱动,使其可以通过网络nfs的方式挂载在ubantu主机环境上的文件系统,从而实现linux系统的完全启动。【实验环境】1、Ubuntu 7.0.4发行版2、GEC2410平台以及开发板中移植好的u-boot 3、交叉编译器 arm-linux-gcc 【实验步骤】(1) 下载linux内核/pub/linux/kernel/v2.6/linux-.tar.bz2 ,下载linux2.6.14内核致/source/kernel目录,如果没有/source/kernel目录,自行建立目录。 root:/source/kernel# cd /source/kernel/ root:/source/kernel# tar -xjvf linux-2.6.14.tar.bz2 root:/source/kernel/linux-2.6.14# pwd /source/kernel/linux-2.6.14 root:/source/kernel# cd linux-2.6.14 进入内核解压后的目录,以后示例中,只要是相对路径全部是相对于 /source/kernel/linux-2.6.14这个目录。 (2) 修改Makefile文件 修改内核目录树根下的的Makefile,指明交叉编译器: root:/source/kernel/linux-2.6.14# vim Makefile 找到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# export PATH=$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在文件最后添加 export PATH=$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-$ vim drivers/net/Makefile 在文件中添加: obj-$(CONFIG_CS8900a) +=cs8900a.o (5)保存退出,修改Kconfig文件linux:/source/kernel/linux-2.6.14-$ vim drivers/net/Kconfig 在以下代码段下面config DM9000 tristate DM9000 support depends on ARM & NET_ETHERNET select CRC32 select MII -help- Support for DM9000 chipset. To compile this driver as a module, choose M here and read .The module willbe called dm9000.加入以下信息: config CS8900a tristate CS8900a support (注意开头使用TAB键,下同)depends on ARM & NET_ETHERNET -help- Support for cs8900a chipset. To compile this driver as a module, choose M here and read. (6)支持启动时挂载devfs 为了内核支持devfs以及在启动时并在/sbin/init运行之前能自动挂载/dev为devfs文件系统,并且自动创建设备结点,修改fs/Kconfig文件: root:/source/kernel/linux-2.6.14# vim fs/Kconfig 找到menu Pseudo filesystems 添加如下语句: config DEVFS_FS bool /dev file system support (OBSOLETE)default y config DEVFS_MOUNT bool Automatically mount at boot default y depends on DEVFS_FS (7)为网卡驱动添加头文件 #touch include/asm-arm/arch-s3c2410/smdk2410.h 在文件smdk2410.h中添加如下内容: #ifndef _ASM_ARCH_SMDK2410_H #define _ASM_ARCH_SMDK2410_H #include #define vSMDK2410_ETH_IO 0xE9000000 /网卡的虚拟地址#define pSMDK2410_ETH_IO 0x19000000 /网卡的物理地址#define SMDK2410_ETH_IRQ IRQ_EINT9 /网卡中断号#endif (8)建立网卡地址内存映射 root:/source/kernel/linux-2.6.14# vim arch/arm/mach-s3c2410/mach-smdk2410.c 添加: #include static struct map_desc smdk2410_iodesc _initdata = /* nothing here yet */ vSMDK2410_ETH_IO,pSMDK2410_ETH_IO,SZ_1M,MT_DEVICE ; (9)配置内核支持CS8900A网卡root:/source/kernel/linux-2.6.14# make menuconfig Loadable module support - * Enable loadable module support * Automatic kernel module loading Floating point emulation - * NWFPE math emulation /增加对NWFPE浮点运算库的支持File systems - /针对文件系统的设置Pseudo filesystems - * /proc file system support * Virtual memory file system support (former shm fs) * /dev file system support (OBSOLETE) * Automatically mount at boot (NEW) Network File Systems - NFS file system support /支持nfs文件系统* Root file system on NFSDevice Drivers - /配置网卡驱动:Network device support - * Network device support Ethernet (10 or 100Mbit) - * Ethernet (10 or 100Mbit) CS8900a support 保存退出,产生.config文件. (10)编译内核产生zImage文件, 并将arch/arm/boot/zImge拷贝到/tftpboot目录中(11)拷贝rootfs-.tar.gz到配置了tftp及nfs服务的ubantu7.04环境中假定/source/rootfs为nfs的服务目录,则:root:/source#cp rootfs.tar.gz /sourceroot:/source#tar zxvf rootfs.tar.gz在目录/souce/rootfs下存放着一个可用的文件系统(文件系统的实验在后面的实验中会涉及到)。确保主机端tftp及nfs服务是开启的。(12)修改内核启动参数GEC2410# setenv bootcmd tftp 30008000 zImage; go 30008000GEC2410# setenv bootargs root=nfs nfsroot=3:/source/rootfs ip=34 console=ttySAC0,115200 init=/linuxrcGEC2410#saveenv(13)启动开发平台,在超级终端观察现象GEC2410# boot如果顺利,可以在串口终端显示linux命令行终端了!实验五 Linux-2.6.14内核移植- NandFlash驱动的添加【实验目的】本实验通过在上个实验结果的linux2.6.14内核上移植NAND Flash驱动,使其可以设别到NAND Flash分区,并可以管理相应的Flash设备。从而进一步完善系统结构,并通过移植的过程来了解nandflash的移植方法。【实验环境】1、Ubuntu7.04发行版2、GEC2410平台以及开发板中移植好的u-boot 3、交叉编译器 arm-linux-gcc 【实验步骤】在linux2.6.14内核中已经包含了s3c2410的nand flash控制器驱动,但需要做一些配置工作才能正常使用。(1)指明分区信息,建立分区表在arch/arm/mach-s3c2410/decs.c文件中,添加分区信息:#vim arch/arm/mach-s3c2410/devs.c添加:#include #include #include static struct mtd_partition partition_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分区struct s3c2410_nand_set nandset= nr_partitions: 4, / nr_partitions为分区数partitions:partition_info, / partitions:partition_info为分区表;(2) 建立nandflash硬件支持struct s3c2410_platform_nand superlpplatform= tacls:0, twrph0:30, twrph1:0, sets:&nandset, nr_sets:1, ;/*这些参数的含义请参看s3c2410的关于NANDFLASH的datasheet*/(3) 加入nand flash芯片支持到nand flash驱动修改此文件arch/arm/mach-s3c2410/devs.c中的s3c_device_nand结构体变量,添加对dev成员的赋值: struct platform_device s3c_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文件,具体操作如下:#vim arch/arm/mach-s3c2410/mach-smdk2410.c 修改smdk2410_devices.指明初始化时包括我们在前面所设置的flash信息 static struct platform_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#make menuconfigDevice Drivers - Memory Technology Devices (MTD) - * MTD partitioning support NAND Flash Device Drivers - NAND Device Support NAND Flash support for S3C2410/S3C2440 SoC 这些选项代表对NANDFLASH的操作。(6)编译内核,并将arch/arm/boot/zImge烧写到开发板 (7)启动系统,在串口终端输入:/ # cat /proc/mtddev: size erasesize namemtd0: 00040000 00004000 u-bootmtd1: 001c0000 00004000 kernelmtd2: 02300000 00004000 cramfsmtd3: 01b00000 00004000 user_rootfs可以看到系统已经可以支持nand flash了。实验六 Linux-2.6.14内核移植-Yaffs2文件系统移植【实验目的】Yaffs2是一种专门为NAND Flash设计的可读写文件系统,本实验是在前面以上的实验的基础上,加入了对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源码复制过去。相关的命令如下:# mkdir yaffs2 # cd yaffs2/ #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 # vim Makefile 添加下面一行: obj-$(CONFIG_YAFFS_FS) += yaffs2/ (3)修改fs目录下Kconfig: # vim Kconfig 找到下面的代码:config UFS_FS_WRITE bool UFS file system write support (DANGEROUS) depends on UFS_FS & EXPERIMENTAL help Say Y here if you want to try writing to UFS partitions. This is experimental, so you should back up your UFS partitions beforehand. 添加下面一行:source fs/yaffs2/Kconfig endmenu 注意 :在Kconfig中添加的选项位置决定了配置内核时选项出现在那个层次目录中,为了保持配置选项目路结构清晰,source fs/yaffs2/Kconfig一定要添加在 menu Miscellaneous filesystems endmenu 之间的位置上,如上所示添加在了endmenu行的上方,作为fs的最后一个选项。 (4)配置内核选项,目的是内核支持Yaffs2文件系统 File systems - Miscellaneous filesystems - YAFFS2 file system support * Autoselect yaffs2 format (5)编译内核,重新下载。在终端下执行:/ # cat /proc/filesystemsnodev sysfsnodev rootfsnodev bdevnodev procnodev sockfsnodev pipefsnodev futexfsnodev tmpfsnodev inotifyfsnodev eventpollfsnodev devpts ext2 cramfsnodev ramfsnodev devfsnodev nfsnodev nfsd romfs yaffs yaffs2nodev rpc_pipefs 可以看出内核支持了多种文件系统,包括yaffs2。(6)测试yaffs2文件系统从nand flash移植实验中可以看出/dev/mtdblock/3是用户分区。root192 /# mount -t yaffs2 /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.device drivers-usb support-Support for Host-side USB OHCI HCD support USB Mass Storage support 这些配置是对host端和device端的支持. 2.SCSI device support - SCSI disk support SCSI generic support SCSI media changer support 这是对U盘的SCSI类型的支持3.file system - DOS/FAT/NT Filesystems - MSDOS fs support VFAT (Windows-95) fs support (437) Default codepage for FAT (iso8859-1) Default iocharset for FAT 支持相应的文件系统4.Partition Types - * Advanced partition selection * PC BIOS (MSDOS partition tables) support支持相应的分区,这个必须有,否则无法挂载操作5. Native Language Support - (iso8859-1) Default NLS Option Codepage 437 (United States, Canada) Simplified Chinese charset (CP936, GB2312) NLS ISO 8859-1 (Latin 1; Western European Languages) 支持相应的语言(2) 启动开发板插入U盘,出现一下信息:root192 /# usb 1-1: new full speed USB device using s3c2410-ohci and address 2scsi0 : SCSI emulation for USB Mass Storage devices Vendor: Netac Model: OnlyDisk Rev: 1.00 Type: Direct-Access ANSI SCSI revision: 02SCSI device sda: 2039808 512-byte hdwr sectors (1044 MB)sda: Write Protect is offsda: assuming drive cache: write throughSCSI device sda: 2039808 512-byte hdwr sectors (1044 MB)sda: Write Protect is offsda: assuming drive cache: write through /dev/scsi/host0/bus0/target0/lun0: p1Attached scsi removable disk sda at scsi0, channel 0, id 0, lun 0Attached scsi generic sg0 at scsi0, channel 0, id 0, lun 0, type 0(3) 挂载U盘并查看信息root192 /# mount -t vfat /dev/scsi/host0/bus0/target0/lun0/part1 /tmproot192 /# cd /tmproot192 tmp# lsbutton.c u-boot.tar.bz2chat u-boot.bindelautorun.bat usb.cdelautorun.ini yoyo实验九 Linux-2.6.14内核移植-添加LCD设备驱动【实验目的】在GEC2410开发板上进行linux-2.6.14内核的移植,这个部分完成LCD驱动的移植,完成相应的功能。【实验环境】1、Ubuntu7.04发行版2、GEC2410平台以及开发板中移植好的u-boot 3、交叉编译器 arm-linux-gcc【实验步骤】(1) 在linux/arch/arm/mach-s3c2410/mach-smdk2410.c里添加头文件:#include #include #include #include #include #include (2) 在linux-2.6.14/arch/arm/mach-s3c2410/mach-smdk2410.c文件中添加如下信息:static struct s3c2410fb_mach_info smdk2410_lcdcfg_initdata = .fixed_syncs= 0, .regs=.lcdcon1=(78)|(07)|(35)|(121),.lcdcon2=(424)|(23914)|(46)|4,.lcdcon3=(1319)|(3198)|4,.lcdcon4=(138)|18,.lcdcon5=(111)|(110)|(19)|(18)|(07)|(06)|(13)|(0 Graphics support -S3C2410LCDframebuffersupport S3C2410lcddebugmessages Virtual Frame Buffer support (ONLY FOR TESTING!) Logo configuration -*Bootuplogo *StandardblackandwhiteLinuxlogo *Standard16-colorLinuxlogo *Standard 224-color Linux logo (4) 重新编译内核root:/source/kernel/linux-2.6.14# make zImage(5) 重起开发板这个时候会有一个很可爱的小企鹅的logo。说明你的驱动移植成功。(6) 用QTOPIA来测试root192 /# qpe qws 观察你的LCD屏。实验十 制作和部署Linux文件系统【实验目的】熟悉Linux文件系统目录结构,创建自己的文件系统,通过NFS方式集成测试,用文件系统生成ramdisk文件系统映象文件。 【实验环境】1、Ubuntu 7.0.4发行版2、GEC2410平台以及开发板中移植好的u-boot,编译好的Linux-2.6.14内核3、交叉编译器 arm-linux-gcc【实验步骤】(1)下载并配置buxybox源码从/downloads/下载最新的busybox-1.10.0.tar.bz2。进入busybox-1.10.0目录,运行make menucofig,进入配置接口,并做出如下配置:root:/source# tar -zxvf busybox-1.1.0.tar.gzroot:/source# cd busybox-1.1.0root:/source# make menuconfigl 进入“General Configuration - ”菜单,添加“Support for devfs”选项,然后回到主菜单。* Show verbose applet usage messages Support -install -s to install applet links at runtime Enable locale support (system needs locale for this to work) * Support for devfs * Use the devpts filesystem for Unix98 PTYs Clean up all memory before exiting (usually not needed) l 进入“Build Options -”菜单,添加交叉编译工具配置 * Build BusyBox as a static binary (no shared libs) Build with Large File Support (for accessing files 2 GB) * Do you want to build BusyBox with a Cross Compiler? (/usr/i386-linux-uclibc/bin/i386-uclibc- ) Cross Compiler prefix () Any extra CFLAGS options for the compiler? 选中“Cross Compiler prefix”,回车,然后输入交叉编译工具所在目录及前缀(提示:按下Ctrl键,再按Back Space可删除字符),例如:/usr/local/arm/3.3.2/bin/arm-linux-l 进入“Linux Module Utilities -”,如下配置 * insmod * Module version checking Add module symbols to kernel symbol table (NEW) In kernel memory optimization (uClinux only) (NEW) Enable load map (-m) option (NEW) * rmmod * lsmod lsmod pretty output for 2.6.x Linux kernels (NEW) * modprobe * Multiple options parsing (NEW) - Options common to multiple modutils * Support tainted module checking with new kernels (NEW) * Support version 2.2.x to 2.4.x Linux kernels (NEW) * Support version 2.6.x Linux kernels (NEW)l 进入“Networking Utilities -”,去掉“Route”选项l 进入“Linux System Utilities -”,添加“Support mounting NFS file systems”选项l 退出配置界面,并保存配置。l 编译busybox运行make命令,编译busybox$makel 在用ubantu系统编译busybox-1.1.0时,每次make menuconfig配置完以后,编译时会报错,待报错后需要修改include/bb_config.h中的第一行。具体如下:修改“-e #ifndef BB_CONFIG_H”为“#ifndef BB_CONFIG_H”(在文件开头)l 编译busybox运行make命令,编译busyboxroot:/source/busybox-1.1.0# make(2)安装建立busybox文件系统运行make install,将在busybox目录下生成_install的目录,里面就是busybox生成的工具。 root:/source/busybox-1.1.0# make installl 创建目录结构进入_install目录,建立目录:root:/source/busybox-1.1.0# cd _install/root:/source/busybox-1.1.0/_install# mkdir dev etc lib mnt proc var tmpl 建立初始化启动所需文件进入_install /etc目录,建立inittab文件,文件内容:#this is run first except when booting in single-user mode.:sysinit:/etc/init.d/rcS # /bin/sh invocations on selected ttys# Start an askfirst shell on the console (whatever that may be) :askfirst:-/bin/sh # Stuff to do when restarting the init process :restart:/sbin/init # Stuff to do before rebooting :ctrlaltdel:/sbin/reboot进入_install /etc目录,建立init.d目录,进入init.d目录,建立rcS文件,文件内容如下: #!/bin/sh # This is the first scrip

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论