Chinaunix首页 | 论坛 | 博客
  • 博客访问: 41877
  • 博文数量: 42
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 32
  • 用 户 组: 普通用户
  • 注册时间: 2014-10-30 10:34
文章分类
文章存档

2014年(42)

我的朋友

分类: LINUX

2014-11-19 19:07:37

    XC2440开发板已经上市一段时间了,这块开发板主要亮点就是linux驱动,这也是我比较满意的地方。从现在开始把移植的过程放到博客上,供大家学习参考,这些内容都截自《XC2440开发板linux内核驱动移植手册Ver.B》, 全篇共24节,同时还会加入一些内容,也可以做为驱动专题视频教程的参考文章。
    
更多精彩内容请访问小超嵌入式工作室论坛:

第一节,准备移植,针对XC2440开发板编写BSP文件

获得内核源码:

       Linux-2.6.37.4.tar.bz2(在光盘资料/源码包/kernel源码目录下)

       也可到官方网站HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH获得最新版本的内核源码


解压源码,进入目录:

       #tar  xjvf  linux-2.6.37.4.tar.bz2

       #cd  linux-2.6.37.4      

       

    由于我们没有使用root用户登录ubuntu系统,刚解压出的文件夹和文件还没有可写权限,我们要给源码目录加上所有权限,以方便后面的修改操作:

       #sudo  chmod  777  linux-2.6.37.4  -R

    参数-R表示递归地改变每个子目录下文件的权限

96B

修改 Makefile文件  191行:

97BARCH = arm                       ß指定系统硬件架构

98BCROSS_COMPILE ?= arm-linux-       ß指定交叉编译器


99B创建XC2440的初始化文件

100B仿照arch/arm/mach-s3c2440/mach-smdk2440.c,在arch/arm/mach-s3c2440目录下编写针对XC2440开发板的初始化文件,取名为:mach-xc2440.c(可以直接复制mach-smdk2440.c文件,只保留其中的头文件)

 

101B主要代码如下:

  1. static struct map_desc xc2440_iodesc[ ] __initdata = {
  2.     /* No use */
  3. };

  4. static struct s3c2410_uartcfg xc2440_uartcfgs[ ] __initdata = {
  5.     [0] = {
  6.         .hwport     = 0,
  7.         .flags     = 0,
  8.         .ucon     = 0x3c5,
  9.         .ulcon     = 0x03,
  10.         .ufcon     = 0x51,
  11.     },
  12.     [1] = {
  13.         .hwport     = 1,
  14.         .flags     = 0,
  15.         .ucon     = 0x3c5,
  16.         .ulcon     = 0x03,
  17.         .ufcon     = 0x51,
  18.     },
  19.     [2] = {
  20.         .hwport     = 2,
  21.         .flags     = 0,
  22.         .ucon     = 0x3c5,
  23.         .ulcon     = 0x03,
  24.         .ufcon     = 0x51,
  25.     }
  26. };

  27. static struct platform_device *xc2440_devices[ ] __initdata = {

  28. };

  29. static void __init xc2440_machine_init(void)
  30. {
  31.   platform_add_devices(xc2440_devices, ARRAY_SIZE(xc2440_devices));
  32. }

  33. static void __init xc2440_map_io(void)
  34. {
  35.     s3c24xx_init_io(xc2440_iodesc, ARRAY_SIZE(xc2440_iodesc));
  36.     s3c24xx_init_clocks(12000000);
  37.     s3c24xx_init_uarts(xc2440_uartcfgs, ARRAY_SIZE(xc2440_uartcfgs));
  38. }

  39. MACHINE_START(XC2440, "XC2440")
  40.     .boot_params    = S3C2410_SDRAM_PA + 0x100,
  41.     .init_irq    = s3c24xx_init_irq,
  42.     .map_io        = xc2440_map_io,
  43.     .init_machine    = xc2440_machine_init,
  44.     .timer        = &s3c24xx_timer,
  45. MACHINE_END

147B

修改同目录(arch/arm/mach-s3c2440/)下的KconfigMakefile文件,加入对xc2440开发板的支持

 

148BKconfig文件的最后面加入

  1. config MACH_XC2440
  2.        bool "XC2440 development board with S3C2440 CPU module "
  3.        select CPU_S3C2440
  4.        select S3C_DEV_NAND
  5.        help
  6.               Say Y here if you are using the XC2440 development board.
  7. endmenu

149B

156BMakefile文件中加入

  1. obj-$(CONFIG_MACH_XC2440) += mach-xc2440.o


158B修改机器码(这个要和bootloader的匹配):

159B找到s3c2440的机器码,在arch/arm/tools/mach-types   379行:

160Bs3c2440      ARCH_S3C2440           S3C2440           362

161B最后面的数字362就是机器码,xc2440uboot中的机器码也是362

162B但是这个机器码对应的machineS3C2440,而我们的machineXC2440

163B因为mach-xc2440.c中定义了MACHINE_START(XC2440, "XC2440")

164B379行用#注释掉,在下面加一行:

  1. #s3c2440 ARCH_S3C2440 S3C2440 362

  2. xc2440 MACH_XC2440 XC2440 362


167B配置内核

168B#make  menuconfig     ß进入图形化配置界面

 

启动时可能会报错,因为运行menuconfig需要ncurses 库的支持,新安装的ubuntu10.10中没有这个库,那我们就手动下载这个库:

#sudo  apt-get  install  libncurses5-dev

等待安装完这个库后,再执行#make  menuconfig就可以进入图形配置界面了

 

169B在配置菜单中选择这一项:Load an Alternate Configuration File”

 

170B输入2440的默认配置文件:arch/arm/configs/s3c2410_defconfig

171B然后选择OK,按回车

 

172B进入System Type”选项单,里面的选项保持默认

 

173B

S3C24XX Machine” 6选项中,依次进入,把其中的所有平台选项都取消,只选中“S3C2440”中的“XC2440”,完整配置如下:

  1. S3C2410 Machines --->
  2.               [ ] SMDK2410/A9M2410
  3.               [ ] IPAQ H1940
  4.               [ ] Acer N30 family
  5.               [ ] Simtec Electronics BAST (EB2410ITX)
  6.               [ ] NexVision OTOM Board
  7.               [ ] AML M5900 Series
  8.               [ ] TCT Hammer Board
  9.               [ ] Thorcom VR1000
  10.               [ ] QT2410
  11. S3C2412 Machines --->
  12.               [ ] Logitech Jive 
  13.               [ ] SMDK2413
  14.               [ ] SMDK2412
  15.               [ ] VMSTMS
  16. S3C2416 Machines --->
  17.               [ ] SMDK2416
  18. S3C2440 and S3C2442 Machines --->
  19.               [ ] Simtec Electronics ANUBIS
  20.               [ ] Openmoko GTA02 / Freerunner phone
  21.               [ ] Simtec IM2440D20 (OSIRIS) module
  22.               [ ] HP iPAQ rx3715
  23.               [ ] SMDK2440
  24.               [ ] NexVision NEXCODER 2440 Light Board
  25.               [ ] SMDK2440 with S3C2440 CPU module
  26.               [ ] SMDM2440 with S3C2442 CPU module
  27.               [ ] Avantech AT2440EVB development board
  28.               [ ] MINI2440 development board
  29.               [ ] HP iPAQ rx1950
  30.               [*] XC2440 development board with S3C2440 CPU module
  31. S3C2443 Machines --->
  32.               [ ] SMDK2443

 

176B让内核支持EABI编译器

  1. Kernel Features --->
  2.        [*] Use the ARM EABI to compile the kernel 
  3.        [*] Allow old ABI binaries to run with this kernel (EXPERIMENTA)

 

180B配置完后,回到主菜单,选择这一项Save an Alternate Configuration File”输入要保存的配置文件名称:.config  (注意config前面有一个“点”)

181B编译内核的时候,就会找.config这个配置文件,所以第一次配置完后一定要保存成这个文件名,以后每次配置完退出后都会自动保存成.config,无需手动保存

 

182B

选择按回车,退回主菜单,选择退出配置,弹出窗口,提示是否要保存配置,选择按回车


183B编译内核 #make zImage            (注意:I是大写的i

 

184B编译完成后,会在arch/arm/boot下生成内核镜像文件,镜像名为:zImage

 

185BzImage镜像烧进NandFlashkernel分区中跑一下,看终端是否正常打印出信息并正常引导操作系统

186B如果第一步能正常引导内核,那就开始进行第二步,添加驱动


小超嵌入式工作室出品,  转载请注明出处,谢谢合作!


阅读(420) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~