linux2.6.32.2移植到ARM平台(mini2440)

发布者:龙腾少年最新更新时间:2016-12-05 来源: eefocus关键字:linux  移植  ARM平台  mini2440 手机看文章 扫描二维码
随时随地手机看文章

1、指定交叉编译变量

即修改顶层Makefile文件,vim打开,修改如下:

原 

export KBUILD_BUILDHOST := $(SUBARCH) 

  ARCH ?= $(SUBARCH) 

CROSS_COMPILE ?= 

改为 

export KBUILD_BUILDHOST := $(SUBARCH) 

ARCH ?= arm  //指定目标平台为ARM

CROSS_COMPILE ?= arm-linux- //指定交叉编译器,此处是系统默认的,若指定其他的需要把路径完整列出

修改完毕之后,先编译一下,看是否能通过,

# make s3c2410_defconfig

# make

2、编译通过了,继续。

mini2440的机器码是1999,在内核arch/arm/tools/mach-types查看,u-boot的在/include/asm-arm/mach-types.h查看

# cd /linux2.6.32.2/arch/arm/mach-s3c2440

有一个mini2440.c,这是国外的linux爱好者添加的对mini2440支持的源码内容,删除,rm掉

# cp mach-smdk2440.c mach-mini2440.c

vim之,修改

MACHINE_START(S3C2440, "SMDK2440")

MACHINE_START(MINI2440, "FriendlyARM Mini2440 development board") //这里,MINI2440必须为大写,不 能小写,原因应该是编译程序的识别问题吧

这是什么意思呢?当系统在开发板跑起来的时候,cat /proc/cpuinfo可以看到上面FriendlyARM Mini2440 development  board的字符串,即修改了开发板的信息。

3、修改时钟频率

还在2步的c文件,160行,16934400这串数字改为12000000,因为smdk开发板的晶振频率是16.9344MHz,而mini2440是 12MHz,不修改的话,暂时不知道会有什么问题,不过就单片机而言,晶振不对,各种驱动也不可能成功驱动。

4、还是2步的c文件,在vim编辑器里:%s/smdk2440/mini2440/g,这表示把文件中字符串“smdk2440”都匹配替换成“mini2440”, g=global,

把mini2440_machine_init(void)函数里面的smdk_machine_init()注释掉,这是一个初始化函数,需要自己写

到这里,就可以make来测试一下了

----------------------------------------------------------------------------------------------------------------------------------------------------------------

5、移植nand驱动及更改分区信息

在arch/arm/mach-s3c2440/mach-mini2440.c中,有一个nand分区信息结构体,更改好分区信息,0区256KB,1区128KB,2 区5MB,3区剩下的,4区留空备用,分区表完成

另外,还要把nand注册到系统中去,具体是arch/arm/mach-s3c2440/mini2440.c的static struct platform_device  *mini2440_devices[] __initdata结构体,在末尾加上&s3c_device_nand,这样,nand的驱动算是移植完成了

在这里,有一个小问题,在内核添加了yaffs2的支持后,再make zImage有了无数个error和warning,原因:不是结构体没写 好,二是没有头文件的支持

static struct mtd_partition mini2440_default_nand_part[] = {
       [0] = {
               .name   = "U-boot",
               .size   = 0x00040000,
               .offset = 0,
       },
       [1] = {
               .name   = "UbootEnv",
               .offset = 0x00040000,
               .size   = 0x00020000,
       },
       [2] = {
               .name   = "Kernel",  
               .offset = 0x00060000,
               .size   = 0x00500000,
       },
       [3] = {
               .name   = "Rootfs",
               .offset = 0x00560000,
               .size   = 1024 * 1024 * 1024, //
       },
       [4] = {
               .name   = "nand",
               .offset = 0x00000000,
               .size   = 1024 * 1024 * 1024, //
       }
};

static struct s3c2410_nand_set mini2440_nand_sets[] = {
       [0] = {
               .name           = "NAND",
               .nr_chips       = 1,
               .nr_partitions  = ARRAY_SIZE(mini2440_default_nand_part),
               .partitions     = mini2440_default_nand_part,
       },
};

static struct s3c2410_platform_nand mini2440_nand_info = {
       .tacls          = 20,
       .twrph0         = 60,
       .twrph1         = 20,
       .nr_sets        = ARRAY_SIZE(mini2440_nand_sets),
       .sets           = mini2440_nand_sets,
       .ignore_unset_ecc = 1,
};

添加了以上代码后,在include一下头文件:

#include  
#include  
#include  
#include  
#include  

接下来,还得在static void __init mini2440_map_io(void)函数中添加:

s3c_device_nand.dev.platform_data = &mini2440_nand_info;

这才make成功,without errors and warnings

6、DM9000网卡驱动的移植

在drivers/net/dm9000.c中添加头文件

#include

  定义网卡的物理地址

#define MACH_MINI2440_DM9K_BASE (S3C2410_CS4 + 0x300)

  设置网卡



static struct resource mini2440_dm9k_resource[] = {
       [0] = {
               .start = MACH_MINI2440_DM9K_BASE,
               .end   = MACH_MINI2440_DM9K_BASE + 3,
               .flags = IORESOURCE_MEM
       },
       [1] = {
               .start = MACH_MINI2440_DM9K_BASE + 4,
               .end   = MACH_MINI2440_DM9K_BASE + 7,
               .flags = IORESOURCE_MEM
       },
       [2] = {
               .start = IRQ_EINT7,
               .end   = IRQ_EINT7,
               .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE,
       }
};

static struct dm9000_plat_data mini2440_dm9k_pdata = {
       .flags          = (DM9000_PLATF_16BITONLY | DM9000_PLATF_NO_EEPROM),
};

static struct platform_device mini2440_device_eth = {
       .name           = "dm9000",
       .id             = -1,
       .num_resources  = ARRAY_SIZE(mini2440_dm9k_resource),
       .resource       = mini2440_dm9k_resource,
       .dev            = {
               .platform_data  = &mini2440_dm9k_pdata,
       },
};


在mach-mini2440.c的static struct platform_device *mini2440_devices[] __initdata函数中添加

&mini2440_device_eth,

以上是设备接口的填充,接着要调整DM9000的位宽寄存器,在dm9000.c文件中添加

#if defined(CONFIG_ARCH_S3C2410) 

 #include  

 #endif 

  在static int __init dm9000_init(void) 函数中添加以下代码:

#if defined(CONFIG_ARCH_S3C2410) 


unsigned int oldval_bwscon = *(volatile unsigned int *)S3C2410_BWSCON; 

unsigned int oldval_bankcon4 = *(volatile unsigned int *)S3C2410_BANKCON4; 

*((volatile unsigned int *)S3C2410_BWSCON) =             (oldval_bwscon  &  ~(3<<16))  |  S3C2410_BWSCON_DW4_16  | S3C2410_BWSCON_WS4 |  S3C2410_BWSCON_ST4;

*((volatile unsigned int *)S3C2410_BANKCON4) = 0x1f7c; 

#endif


  使用“软”mac地址:

在static int __devinit dm9000_probe (struct platform_device *pdev) 函数中添加红色的代码




if (!is_valid_ether_addr(ndev->dev_addr)) 

                /* try reading from mac */ 

                mac_src = "chip"; 

                for (i = 0; i < 6; i++) 

                        ndev->dev_addr[i] = ior(db, i+DM9000_PAR); 

        } 

        // 使用“软”MAC地址: 08:90:90:90:90:90 

        memcpy(ndev->dev_addr, "\x08\x90\x90\x90\x90\x90", 6); 


然后在make menuconfig选上DM9K的配置


关键字:linux  移植  ARM平台  mini2440 引用地址:linux2.6.32.2移植到ARM平台(mini2440)

上一篇:DM9000驱动在MINI2440上的移植学习笔记
下一篇:基于S3C2410 的时钟频率小结

推荐阅读最新更新时间:2024-03-16 15:23

linux 下面avr开发环境的安装
(1)安装开发工具链 yum install avr-* 会安装以下的工具 avr-gcc-4.7.2-1.fc17.i686 avr-libc-1.8.0-2.fc17.noarch avr-binutils-2.23.1-1.fc17.i686 avr-gcc-c++-4.7.2-1.fc17.i686 avr-gdb-7.1-4.fc17.i686 avr-libc-doc-1.8.0-2.fc17.noarch (2)安装(usbkey boot loader) yum install dfu-programmer (3)安装(avrdude) yum install avrdude (4)安装调试工具硬件驱动()
[单片机]
linux 2.6.24.4在S3C2410上的移植(CS8900网卡驱动)(基于GEC2410)
SMDK2410配置默认使用的是DM9000A的网卡,因此我们需要修改成CS8900A的网卡驱动. 网上找到移植方法有两种方法,一种是将以前版本的cs8900.c驱动拿过来用,只要在配置中增加ARM_CS8900选项,这个代码网上有很多,拿过来试了以下,的确没问题. 另一种方法是修改2.6.24.4自带的cs89x0.c驱动,这个驱动没有2410的直接支持,我们需要修改. 这里采用第二种方法.参考了网上很多方法,将我的步骤整理如下,如有错误,欢迎指正. 1.内核配置菜单 由于cs89x0驱动依赖于NET_PCI,见drivers/net/Kconfig depends on NET_PCI && (ISA || M
[单片机]
<font color='red'>linux</font> 2.6.24.4在S3C2410上的<font color='red'>移植</font>(CS8900网卡驱动)(基于GEC2410)
ARM Linux上使用OpenGL
这两天在ARM上跑了一个OpenGL,应该说是OpenGL|ES的软件包,虽然我觉得可能最后我不会使用这个软件包,但是还是记录下来以备忘记。 先全局介绍下,首先,什么是OpenGL和OpenGL|ES。OpenGL是一套绘图函数的标准,OpenGL|ES是OpenGL中针对嵌入式系统的一套函数子集。OpenGL|ES的官方是http://www.khronos.org/opengles/, 上面有更多的信息。需要注意的是,OpenGL仅仅是标准,而如果你要使用OpenGL,则需要找到可以实现这些OpenGL标准函数的程序库或源代码。 目前,在ARM这种一般没有图形加速器的平台上,OpenGL|ES的实现都是靠软件的。主要的Ope
[单片机]
友善之臂 MINI2440开发板与SecureCRT之间的通信
初衷 emmm 我在用MINI2440开发板即友善之臂经典学习板和SecureCRT之间的通讯(即用Windows下的软件访问LINUX终端)的时候一直存在配置好久才实现通讯的问题,这导致我每次环境变了或者重装系统的时候就又要花费大量的时间去配置。由于之前配置成过,但是后面因为装了新的系统(之前用的是windos 7,现在换成了windos 10),导致现在又要重新配置环境,eemmm 这一个难受怎么能体现我万马奔腾的内心呢,啊 好难受啊!!由此,决定自己写个博客记录顺便分享一下配置步骤。 试了好久!十二点半出图书馆门,一点才吃完饭!回到寝室就弄了,emmm终于弄好了! 接下来就是配置啦 (我用的是SecureCRT
[单片机]
友善之臂 <font color='red'>MINI2440</font>开发板与SecureCRT之间的通信
STM32 移植 STemwin
移植STemwin 平台STM32F429+LTDC+SDRAM 其实不难就是给自己做个记录,年纪大了记性不好。。。 自己先驱动好TFTLCD, LTDC, SDRAM等 Cubemx配置增大堆栈大小,不然容易出错 需要添加以下文件进行配置 挨个文件配置 GUIConf.c里面主要修改ram大小,酌情而定,不宜太大。 #define GUI_NUMBYTES (1024)*50 GUIDRV_Template.c里面修改以下函数TBD by customer部分添加画点,读点,填充函数 static void _SetPixelIndex(GUI_DEVICE * pDevice, int x, i
[单片机]
STM32 <font color='red'>移植</font> STemwin
linux2.6.32.2 mini2440平台移植-- LCD 显示驱动 ( W35屏 )
1.4.1 LCD 驱动基础知识 Linux-2.6.32.2 内核已经支持 S3C2440 的 LCD 控制器驱动,但在此我们先介绍一下关于 2440 LCD 控制器以及驱动相关的 LCD 的一些基础知识。 注意:在此我们只讨论 TFT LCD,也就是真彩屏。 LCD 驱动中最关键的就是时钟频率(Clock frequency)的设置,时钟频率设置不对,LCD 的显示就会闪,或者根本没有显示。一般 LCD 的 Datasheet 上会写有一个推荐的频率,比如 mini2440 所用的统宝 3.5 LCD,在它的数据手册第 13 页,有这样一个表格:可以看到,这里推荐的时钟频率是 6.39MHz,近似于 6.4MHz,
[单片机]
Mbed在自己的stm32系列平台移植适配(二)
适配平台: cpu:STM32F103RCT6 外设: 引用资源: mbed在线编译器 Mbed源码仓库 Stm32f1官方hal库 二、构建源码工程 1获取NUCLEO_F103RB的模版 既然是根据nucleo_F103RB来适配,当然需要有一个nucleo_F103RB的模版才行,当然没有也是可以的,我们可以手动通过MDK创建一个全新的工程。但是配置一些编译选项可能比较麻烦,所以我们还是通过nucleo_F103RB的模版来修改吧。 打开mbed的官网,进入developer,然后点击编辑器compiler,当然如果没有帐号的先注册一个帐号吧。 然后选择一个开发板,此处我们选择nucleo-f10
[单片机]
Mbed在自己的stm32系列<font color='red'>平台</font><font color='red'>移植</font>适配(二)
基于ARMLinux的嵌人式设备远程调试模块设计
   0 引 言   目前,大多数的工业设备都有专用的调试接口和调试软件,这种方式能有效解决系统现场调试和维护升级的问题,但也有一些弊端。首先,依赖专用的调试软件,随着产品的丰富,调试软件的版本也随之增加,从而工程人员需要面对软件匹配的麻烦;其次,专用的调试接口和配备专用的调试软件需要专业人员操作,用户无法灵活地使用设备。因此需要一种无需专用设备,方便、易行的设备调试方案。随着计算机技术的发展,以ARM为代表的微处理器的性能得到极大的提高,从而提高了嵌入式系统的性能,应用范围也更加广阔;而网络技术的发展,使得B/S(客户端/服务器)模式成为一种潮流。这两者的结合便为设备的现场调试方式提供了新的方案。工程人员只需要连接Inter
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved