您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > Linux内核配置移植及编译实验
实验七:Linux内核配置移植及编译实验实验目的:1.学习和掌握Linux编译的基本步骤;2.通过实验掌握Linux的配置和编译过程。实验设备:PC机。实验原理:通过文本菜单方式配置命令或X窗口图形界面方式配置命令,会生成.config文件,并且在include/Linux/目录下生成一个用于保存配置信息的自动配置头文件autoconf.h,执行makexconfig或makemenuconfig命令后,在出现的文本菜单或图形菜单配置窗口,即可进行配置。配置完成后进行编译和下载测试。实验方法:1.获得Linux内核源码我们的光盘中提供了linux-2.6.24.4的内核源码,也可以从上下载。将linux-2.6.24.4.tar.bz2拷贝到工作目录下,解压,就可以得到完整的Linux内核源码包:#pwd/root/2410-s#cp/mnt/hgfs/e/linux-2.6.24.4.tar.bz2./#tarjxvflinux-2.6.24.4.tar.bz2#cdlinux-2.6.24.4/2.修改Makefile为了交叉编译内核,需要修改内核的底层Makefile:#viMakefile找到下面的两行:ARCH?=$(SUBARCH)CROSS_COMPILE?=修改成如下两行:ARCH?=armCROSS_COMPILE?=arm-linux-上面这样修改的意思是说我们的目标平台是arm,使用的交叉编译器的前缀是arm-linux-。3.得到.config文件编译内核时会依赖于源代码目录下的.config文件。如果没有这个文件,在makemenuconfig的时候,会默认按照i386的配置生成.config文件,而这不是我们需要的。因此我们要有自己的.config文件。由于我们的配置和SMDK2410开发板的类似,因此可以使用它的.config文件,只需要把它的.config文件拷贝到源代码根目录下的.config文件即可:#cparch/arm/configs/s3c2410_defconfig.config4.修改NandFlash分区由于我们使用的是SMDK2410开发板的原型,SMDK2410开发板的NANDFlash和我们的不一样,因此需要修改。打开arch/arm/plat-s3c24xx/common-smdk.c这个文件:#viarch/arm/plat-s3c24xx/common-smdk.c找到structmtd_partitionsmdk_default_nand_part[]这个结构体,并修改它。修改后的结构体如下面的代码所示:staticstructmtd_partitionsmdk_default_nand_part[]={[0]={.name=Bootloader,.size=0x80000,.offset=0,},[1]={.name=LinuxKernel,.offset=0x80000,.size=SZ_2M,},[2]={.name=RootFileSystem,.offset=0x280000,.size=SZ_4M,},[3]={.name=UserSpace,.offset=0x680000,.size=0x1980000,},};这样就把我们的64M的NANDFlash分为四个区:第一个区从0x00000000到0x00080000,大小为0.5M第二个区从0x00080000到0x00280000,大小为2M第三个区从0x00280000到0x00680000,大小为4M第四个区从0x00680000到0x02000000,大小为25.5M5.添加LCD支持我们的开发平台上配置有640*480的液晶屏,我们来为它加上驱动支持。需要在arch/arm/mach-s3c2410/mach-smdk2410.c中添加一些内容。#viarch/arm/mach-s3c2410/mach-smdk2410.c首先要包含我们的LCD使用的数据结构的头文件,增加如下内容:#includeasm-arm/arch-s3c2410/fb.h#includelinux/platform_device.h然后添加如下内容:staticstructs3c2410fb_displayup2410_fb[]__initdata={{.lcdcon5=(112)|(111)|(19)|(18)|(10),.type=(35),.width=640,.height=480,.pixclock=39721,.xres=640,.yres=480,.bpp=16,.left_margin=40,.right_margin=32,.hsync_len=32,.vsync_len=2,.upper_margin=35,.lower_margin=5,},};staticstructs3c2410fb_mach_infoup2410_fb_info__initdata={.displays=up2410_fb,.num_displays=1,.default_display=0,.gpcup=0xffffffff,.gpcup_mask=0x0,.gpccon=0xaaaaaaaa,.gpccon_mask=0x0,.gpdup=0xffffffff,.gpdup_mask=0x0,.gpdcon=0xaaaaaaaa,.gpdcon_mask=0x0,.lpcsel=0,};然后,在这个文件中找到smdk2410_init这个函数,在函数的末尾添加这样一行,来对LCD的数据进行设置:s3c24xx_fb_set_platdata(&up2410_fb_info);6.添加网卡驱动支持开发板上配置了DM9000A网卡,内核已经有网卡驱动的实现代码,需要我们做一定的配置。在arch/arm/mach-s3c2410/mach-smdk2410.c文件中添加如下内容:staticstructresources3c_dm9ks_resource[]={[0]={.start=0x10000000,.end=0x10000040,.flags=IORESOURCE_MEM,},[1]={.start=IRQ_EINT2,.end=IRQ_EINT2,.flags=IORESOURCE_IRQ,},};structplatform_devices3c_device_dm9ks={.name=s3c2410-dm9ks,.id=-1,.num_resources=ARRAY_SIZE(s3c_dm9ks_resource),.resource=s3c_dm9ks_resource,};然后,把网卡数据加入smdk2410_devices数组:staticstructplatform_device*smdk2410_devices[]__initdata={&s3c_device_usb,&s3c_device_lcd,&s3c_device_wdt,&s3c_device_i2c,&s3c_device_iis,&s3c_device_dm9ks,};另外,根据我们的经典2410开发板的配置,网卡驱动需要修改。由于修改的地方比较多,这里就不详细说明了,直接给出修改后的源文件,在我们光盘的相应src目录下。共两个文件:dm9000.c和dm9000.h。现在需要作的只是把内核中的drivers/net目录下的这两个文件用我们提供的文件替换掉。其中需要注意的是对开发板的初始化。我们的开发板上使用BANK2作为DM9000的IO,中断使用EINT2,因此需要配置好BANK2和EINT2,实现的函数如下(已经在我们的驱动文件中添加了,不需要手动添加):staticvoiduptech_dm9k_init(void){u32bwscon;bwscon=__raw_readl(S3C2410_BWSCON);bwscon&=~(S3C2410_BWSCON_WS2|S3C2410_BWSCON_ST2|S3C2410_BWSCON_DW2_32);bwscon|=(S3C2410_BWSCON_ST2|S3C2410_BWSCON_DW2_16);__raw_writel(bwscon,S3C2410_BWSCON);__raw_writel(S3C2410_BANKCON_Tacs4|S3C2410_BANKCON_Tcos4|S3C2410_BANKCON_Tacc14|S3C2410_BANKCON_Tcoh4|S3C2410_BANKCON_Tcah4|S3C2410_BANKCON_Tacp6|S3C2410_BANKCON_PMCnorm,S3C2410_BANKCON2);set_irq_type(IRQ_EINT2,IRQT_RISING);s3c2410_gpio_cfgpin(S3C2410_GPF2,S3C2410_GPF2_EINT2);s3c2410_gpio_pullup(S3C2410_GPF2,0);printk(KERN_INFOBoardinitforAX88796finished!\n);}然后在这个文件中的axdrv_init函数的开头部分调用这个函数:staticint__initdm9k_init_module(void){uptech_dm_init();returnplatform_driver_register(&dm9k_driver);}7.添加YAFFS文件系统支持将我们提供的YAFFS的源代码yaffs2.tar.gz拷贝到linux-2.6.24.4的同级目录下,解压该源码包,获得YAFFS源码:#pwd/root/2410-s#cp/mnt/hgfs/e/yaffs2.tar.gz./#tarzxvfyaffs2.tar.gz然后进入yaffs2目录,运行./patch-ker.sh给内核打上补丁:#cdyaffs2#./patch-ker.shc../linux-2.6.24.4/这样打好补丁以后,再做正确的配置,内核就可以支持YAFFS文件系统了。8.配置和编译内核到现在,一个简单的内核就准备好了,我们还需要做一些配置,然后编译,内核才能正常使用。在内核源代码的根目录下运行makemenuconfig命令,进入配置界面:#makemenuconfig(1)选择硬件系统做如下选择:SystemType---S3C2410Machines---[*]SMDK2410/A9M2410[]IPAQH1940[]AcerN30[]SimtecElectronicsBAST(EB2410ITX)[]NexVisionOTOMBoard[]AMLM5900Series[]ThorcomVR1000[]QT2410其他的:S3C2400Machines---S3C2412Machines---S3C2440Machines---S3C2442Machines---S3C2443Machines---上面的四个选项下的所有选项都不要选,以减小内核体积。(2)配置LCD驱动做如下选择:DeviceDrivers---Graphicssupport---*Supportforframebufferdevices---*S3C2410LCDframebuffersupport[*]Bootuplogo------Bootuplogo[*]StandardblackandwhiteLinuxlogo[*]Standard16-colorLinuxlogo[*]Standard224-colorLinuxlogo这样,在内核启动的时候,在LCD的左上角就会出现Linux的LOGO,一只小企鹅。(3)配置NANDFlash驱动做如下选择:DeviceDrivers---*Memory
本文标题:Linux内核配置移植及编译实验
链接地址:https://www.777doc.com/doc-6440105 .html