Hi3510 Linux与标准内核差异说明

Hi3510 Linux内核与标准内核差异说明Application Notes

文档版本01

发布日期2007-03-20

BOM编码N/A

深圳市海思半导体有限公司为客户提供全方位的技术支持,用户可与就近的海思办事处联系,也可直接与公司总部联系。

深圳市海思半导体有限公司

地址:深圳市龙岗区坂田华为基地华为电气生产中心邮编:518129

网址:https://www.360docs.net/doc/667617380.html,

客户服务电话:0755-********

客户服务传真:0755-********

客户服务邮箱:support@https://www.360docs.net/doc/667617380.html,.

版权所有 ? 深圳市海思半导体有限公司2007。保留一切权利。

非经本公司书面许可,任何单位和个人不得擅自摘抄、复制本文档内容的部分或全部,并不得以任何形式传播。

商标声明

、、海思,均为深圳市海思半导体有限公司的商标。

本文档提及的其他所有商标或注册商标,由各自的所有人拥有。

注意

由于产品版本升级或其他原因,本文档内容会不定期进行更新。除非另有约定,本文档仅作为使用指导,本文档中的

所有陈述、信息和建议不构成任何明示或暗示的担保。

Application Notes 目录

目录

1 前言...........................................................................................................................................1-1

1.1 产品版本......................................................................................................................................................1-1

1.2 读者对象......................................................................................................................................................1-1

1.3 内容简介......................................................................................................................................................1-1

1.4 修订记录......................................................................................................................................................1-2

2 概述...............................................................................................................................................2-1

3 Hi3510平台相关代码..................................................................................................................3-1

3.1 Hi3510平台相关头文件定义......................................................................................................................3-1

3.2 Hi3510平台相关的实现代码......................................................................................................................3-2

3.3 Hi3510平台相关的修改文件......................................................................................................................3-2

3.4 其他平台相关代码......................................................................................................................................3-3

4 驱动代码.......................................................................................................................................4-1

4.1 Hi3510看门狗驱动......................................................................................................................................4-1

4.2 Hi3510 Flash驱动........................................................................................................................................4-1

4.3 Hi3510串口驱动..........................................................................................................................................4-2

4.4 Hi3510网口及phy驱动..............................................................................................................................4-5

4.5 Hi3510 mtd_ram驱动..................................................................................................................................4-6

4.6 Hi3510 USB驱动.......................................................................................................................................4-10

4.7 Hi3560 USB驱动.......................................................................................................................................4-11

4.8 Hi3560 ide驱动..........................................................................................................................................4-16

5 其它代码.......................................................................................................................................5-1

5.1 Hisilicon内核版本信息模块.......................................................................................................................5-1

5.2 指定编译工具,平台..................................................................................................................................5-1

5.3 增加devfs文件系统配置支持...................................................................................................................5-1

5.4 屏蔽CPU频率调整范围限制....................................................................................................................5-3

Application Notes 1 前言

1 前言

1.1 产品版本

与本文档相对应的产品版本如下所示。

产品名称产品版本

Hi3510通信媒体处理器芯片(简称Hi3510)Hi3510 V100

Hi3510 DVS方案Hi3510 DMS V100R001C210

Linux标准内核(从https://www.360docs.net/doc/667617380.html,下载) 2.6.14

1.2 读者对象

本说明文档主要适用于以下工程师:

z基于Hi3510 DVS单板的软件开发工程师

z Hi3510技术支持工程师

1.3 内容简介

本文档详细叙述Hi3510 Linux内核与标准内核的差异,主要包括针对Hi3510平台的新

增代码、Hi3510相关驱动代码以及其他内核修改代码。通过阅读本说明文档,可以了解

Hi3510 Linux各模块的代码全貌,在进行升级时,便于确认是否冲突。在全书共分为5

章。

章节内容

1 前言本章介绍本文档对应的产品版本、读者对象、内容简介以

及修订记录。

2 概述本章概要介绍Hi3510 Linux与标准内核的差异说明。

1 前言

Hi3510 Linux内核与标准内核差

异说明

Application Notes

章节内容

3 Hi3510平台相关代码本章介绍Hi3510平台相关的代码。该部分内容是将标准

内核移植到Hi3510的关键。

4 Hi3510驱动代码本章介绍Hi3510芯片中部分IO模块的驱动实现代码。主

要包括看门狗驱动、Flash驱动、串口驱动、网口驱动以

及USB驱动等。

5 其他代码本章介绍Hi3510 Linux其他修改代码。

1.4 修订记录

修订记录累积了每次文档更新的说明。最新版本的文档包含以前所有文档版本的更新内

容。

修改日期版本修改说明

2007-03-2001第一次版本。

Application Notes 2 概述

2 概述

Hi3510基于ARM926EJ-S CPU,标准内核已能很好的支持Hi3510 Linux内核。移植标准内核到Hi3510平台上,主要移植包括平台相关的代码,如中断控制器、定时器/时钟、I/O地址映射等。另外Hi3510 Linux中还包括了网口、Flash、USB、看门狗等驱动程序。

Hi3510 Linux基于2.6.14版本的标准内核。

特别说明:在发布包中的内核代码不仅包含了Hi3510的代码,也同时包含了海思其他平台的相

关代码,这些代码与Hi3510无关,将在下文中详细说明。

Application Notes 3 Hi3510平台相关代码

3 Hi3510平台相关代码

平台相关代码集中放置在include/asm-arm/arch-hi3510_v100_p01和

arch/arm/mach-hi3510_v100_p01目录中。其中include/asm-arm/arch-hi3510_v100_p01目

录中存放平台相关的头文件;arch/arm/mach-hi3510_v100_p01目录中存放平台相关的实

现代码。这些文件均为新增文件。

3.1 Hi3510平台相关头文件定义

./include/asm-arm/arch-hi3510_v100_p01/clock.h

./include/asm-arm/arch-hi3510_v100_p01/debug-macro.S

./include/asm-arm/arch-hi3510_v100_p01/dma.h

./include/asm-arm/arch-hi3510_v100_p01/uncompress.h

./include/asm-arm/arch-hi3510_v100_p01/irqs.h

./include/asm-arm/arch-hi3510_v100_p01/timer.h

./include/asm-arm/arch-hi3510_v100_p01/platform.h

./include/asm-arm/arch-hi3510_v100_p01/gpio.h

./include/asm-arm/arch-hi3510_v100_p01/timex.h

./include/asm-arm/arch-hi3510_v100_p01/led.h

./include/asm-arm/arch-hi3510_v100_p01/system.h

./include/asm-arm/arch-hi3510_v100_p01/vmalloc.h

./include/asm-arm/arch-hi3510_v100_p01/param.h

./include/asm-arm/arch-hi3510_v100_p01/media-mem.h

./include/asm-arm/arch-hi3510_v100_p01/cpu.h

./include/asm-arm/arch-hi3510_v100_p01/memory.h

./include/asm-arm/arch-hi3510_v100_p01/early-debug.h

./include/asm-arm/arch-hi3510_v100_p01/hi_dmac.h

./include/asm-arm/arch-hi3510_v100_p01/entry-macro.S

./include/asm-arm/arch-hi3510_v100_p01/io.h

./include/asm-arm/arch-hi3510_v100_p01/hardware.h

3 Hi3510平台相关代码Hi3510 Linux内核与标准内核差

异说明

Application Notes

3.2 Hi3510平台相关的实现代码

./arch/arm/mach-hi3510_v100_p01/ahb-clock.c

./arch/arm/mach-hi3510_v100_p01/media-mem.c

./arch/arm/mach-hi3510_v100_p01/leds.c

./arch/arm/mach-hi3510_v100_p01/Makefile.boot

./arch/arm/mach-hi3510_v100_p01/Kconfig

./arch/arm/mach-hi3510_v100_p01/Makefile

./arch/arm/mach-hi3510_v100_p01/core.c

./arch/arm/mach-hi3510_v100_p01/clock.c

./arch/arm/mach-hi3510_v100_p01/systimer.c

./arch/arm/mach-hi3510_v100_p01/hi_dmac.c

./arch/arm/mach-hi3510_v100_p01/cpu-freq.c

./arch/arm/mach-hi3510_v100_p01/dmac.h

./arch/arm/mach-hi3510_v100_p01/platform-devices.c

3.3 Hi3510平台相关的修改文件

z./arch/arm/Makefile

修改文件,增加Hi3510编译规则,增加内容为:

machine-$(CONFIG_HI3510_V100_P01) := hi3510_v100_p01

z./arch/arm/Kconfig.debug

修改文件,将config FRAME_POINTER配置项中 bool 内容修改为 bool "Frame

pointer"

z./arch/arm/Kconfig.hisilicon

新增文件,Hi3510相关配置信息。

z./arch/arm/configs-hisilicon

新增目录,存放Hisilicon单板配置文件。

z./arch/arm/configs-hisilicon/hi3510_v100_p01_dvs_b01_release.config

新增文件,Hi3510内核配置文件。

z./arch/arm/mm/Kconfig

修改文件,增加Hi3510支持的配置。在config CPU_ARM926T配置项中增加

HI35XX_IP_ARM926EJS。

z./arch/arm/tools/mach-types

修改文件,增加机器类型号定义,增加内容为:

hi35xx ARCH_HI3510 HI3510 387

z./arch/arm/Kconfig

修改文件,增加Hi3510配置信息。修改内容包括以下几个部分:

?首先,增加内容:

config HI35XX_IP_ARM926EJS

bool

Hi3510 Linux内核与标准内核差异说明

Application Notes 3 Hi3510平台相关代码

help

support Hisilicon 35xx series media proccessor, which arm926ejs IP is used.

config ARCH_HISILICON_MP

bool "Hisilicon Series MP"

select HI35XX_IP_ARM926EJS

select EMBEDDED

help

This enables support for hisilicon series Media-Processor

source "arch/arm/Kconfig.hisilicon"

?其次,在config LEDS 配置项中增加ARCH_HI3510定义,将内容:

if (ARCH_SA1100 || ARCH_INTEGRATOR || ARCH_OMAP1)

修改为:

if (ARCH_SA1100 || ARCH_INTEGRATOR || ARCH_OMAP1 ||

HI35XX_IP_ARM926EJS)

?最后,将内容:

if PCMCIA || ARCH_CLPS7500 || ARCH_IOP3XX || ARCH_IXP4XX \

|| ARCH_L7200 || ARCH_LH7A40X || ARCH_PXA || ARCH_RPC \

|| ARCH_S3C2410 || ARCH_SA1100 || ARCH_SHARK || FOOTBRIDGE

修改为:

if PCMCIA || ARCH_CLPS7500 || ARCH_IOP3XX || ARCH_IXP4XX \

|| ARCH_L7200 || ARCH_LH7A40X || ARCH_PXA || ARCH_RPC \

|| ARCH_S3C2410 || ARCH_SA1100 || ARCH_SHARK || FOOTBRIDGE ||

ARCH_HI3510

3.4 其他平台相关代码

在发布包中同时包含了海思其他平台相关代码,这些代码与Hi3510平台无关。

包括以下目录:

./arch/arm/mach-hi3510_v100_f01/

./arch/arm/mach-hi3510_v100_m01/

./arch/arm/mach-hi3560_v100_f01/

./arch/arm/mach-hi3560_v100_m01/

./arch/arm/mach-hi3510v100/

./include/asm-arm/arch-hi3510_v100_f01/

./include/asm-arm/arch-hi3510_v100_m01/

./include/asm-arm/arch-hi3560_v100_f01/

./include/asm-arm/arch-hi3560_v100_m01/

./include/asm-arm/arch-hi3510v100/

以及以下其他单板对应的内核配置文件:

arch/arm/configs-hisilicon/hi3510v100_dvs01.config

3 Hi3510平台相关代码Hi3510 Linux内核与标准内核差

异说明

Application Notes

arch/arm/configs-hisilicon/hi3510_v100_f01a.config

arch/arm/configs-hisilicon/hi3560_v100_m01_stb_b01_release.config arch/arm/configs-hisilicon/hi3510_v100_p01_dvs_b01.config

arch/arm/configs-hisilicon/hi3510_v100_m01_vp_b01.config

arch/arm/configs-hisilicon/hi3510_v100_evb_vp01.config

arch/arm/configs-hisilicon/hi3510_v100_m01_dvs_b01.config

arch/arm/configs-hisilicon/hi3560_v100_m01_stb_b01.config

arch/arm/configs-hisilicon/hi3510_v100_p01_vp_b01.config

arch/arm/configs-hisilicon/hi3560_v100_f01_b01.config

Hi3510 Linux内核与标准内核差异说明

Application Notes 4 驱动代码

4 驱动代码

4.1 Hi3510看门狗驱动

z./drivers/char/watchdog/hi3510_wdt.c

新增文件,Hi3510看门狗驱动。

z./drivers/char/watchdog/Kconfig

修改文件,增加Hi3510看门狗配置菜单,增加内容为:

config HI3510_WATCHDOG

tristate "Hi3510 watchdog"

depends on WATCHDOG && ARCH_HI3510

help

Watchdog timer embedded into Hi3510 system.

To compile this driver as a module, choose M here: the

module will be called hi3510_wdt.

z./drivers/char/watchdog/Makefile

修改文件,增加Hi3510看门狗模块编译规则,增加内容为:

obj-$(CONFIG_HI3510_WATCHDOG) += hi3510_wdt.o

4.2 Hi3510 Flash驱动

z./drivers/mtd/maps/hisilicon/

./drivers/mtd/maps/hisilicon/hisilicon-flash.c

./drivers/mtd/maps/hisilicon/Kconfig

./drivers/mtd/maps/hisilicon/Makefile

新增目录及文件,Hisilicon Flash驱动、配置菜单及编译规则。

z./drivers/mtd/maps/Kconfig

修改文件,增加配置菜单选项,支持Hisilicon Flash驱动配置,增加内容为:

source "drivers/mtd/maps/hisilicon/Kconfig"

z./drivers/mtd/maps/Makefile

4 驱动代码

Hi3510 Linux内核与标准内核差

异说明

Application Notes

修改文件,增加编译规则,增加内容为:

obj-$(CONFIG_MTD_HISILICON) +

=

hisilicon/

z./drivers/mtd/mtdchar.c

修改文件,增加以下代码,用以在devfs文件系统中创建设备文件。

#ifdef CONFIG_DEVFS_FS

#include

#endif

?在函数static void mtd_notify_add(struct mtd_info* mtd)中插入:#ifdef CONFIG_DEVFS_FS

/* DEVFS */

devfs_mk_dir("mtd");

devfs_mk_cdev(MKDEV(MTD_CHAR_MAJOR, mtd->index*2), S_IFCHR | S_IRUGO | S_IWUGO, "mtd/%d", mtd->index);

devfs_mk_cdev(MKDEV(MTD_CHAR_MAJOR, mtd->index*2+1),

S_IFCHR | S_IRUGO, "mtd/%dro", mtd->index);

#endif

?在函数static void mtd_notify_remove(struct mtd_info* mtd)插入:#ifdef CONFIG_DEVFS_FS

/* DEVFS */

devfs_remove("mtd/%d", mtd->index);

devfs_remove("mtd/%dro", mtd->index);

devfs_remove("mtd");

#endif

4.3 Hi3510串口驱动

z./drivers/serial/amba-pl011.c

修改文件,修改内容包括:

?在函数static int __init pl011_init(void)中增加时钟注册操作。

#if defined(CONFIG_ARCH_HI3510) || defined(CONFIG_ARCH_HI3560)

clk_register(&uart_clk);

#endif

?在函数static void __exit pl011_exit(void)中增加时钟注销操作。

#if defined(CONFIG_ARCH_HI3510) || defined(CONFIG_ARCH_HI3560)

clk_unregister(&uart_clk);

#endif

增加时钟结构及回调函数。

#if defined(CONFIG_ARCH_HI3510) || defined(CONFIG_ARCH_HI3560)

Hi3510 Linux内核与标准内核差异说明

Application Notes 4 驱动代码

static int reset_uart_bandrate(void)

{

int i;

struct clk *clk = clk_get(NULL,"UARTCLK");

for (i = 0; i < ARRAY_SIZE(amba_ports); i++)

{

unsigned int quot, lcrh, bandrate ;

struct uart_amba_port *uap =amba_ports[i];

if (amba_ports[i] ==NULL)

continue;

if( (uap->port.uartclk/MHZ) ==0)

continue;

lcrh =readw(uap->port.membase + UART011_LCRH);

quot = (readw(uap->port.membase + UART011_FBRD) & 0x3f) | (readw(uap->port.membase + UART011_IBRD) << 6);

bandrate =uap->port.uartclk*4/quot;

uap->port.uartclk =clk_get_rate(clk);

quot =uap->port.uartclk*4/bandrate;

writew(quot & 0x3f, uap->port.membase + UART011_FBRD);

writew(quot >> 6, uap->port.membase + UART011_IBRD);

writew(lcrh, uap->port.membase + UART011_LCRH);

}

return 0;

}

#include

#include

#include

static int uart_clock_notifier(struct clk *clk,

unsigned int cmd, unsigned long wparam, unsigned long lparam)

{

int ret = 0;

struct clk *p;

4 驱动代码

Hi3510 Linux内核与标准内核差

异说明

Application Notes

switch(cmd) {

case HISILICON_CLK_REGISTER:

case HISILICON_CLK_PARENT_SETRATE:

p =clk_get_parent(clk);

if(p)

clk->rate =clk_get_rate(p);

reset_uart_bandrate();

break;

default:

ret = hisilicon_clk_default_notifier(clk, cmd, wparam, lparam);

break;

}

return ret;

}

static struct clk uart_clk = {

.name ="UARTCLK",

.rate =HISILICON_AHBCLK_DEFAULT,

.notifier = uart_clock_notifier,

.parent_name = "AHBCLK",

};

#endif

?在pl011_rx_chars(struct uart_amba_port *uap)函数中将内容:uap->port.icount.overrun++;

修改为:

{

writew(0, uap->port.membase + UART01x_RSR);

rsr &=0xf7;

uap->port.icount.overrun++;

}

?在函数static int pl011_probe(struct amba_device *dev, void *id)中将内容:base = ioremap(dev->res.start, PAGE_SIZE);

修改为:

/* base = ioremap(dev->res.start, PAGE_SIZE); */

base = (void*)IO_ADDRESS(dev->res.start);

Hi3510 Linux内核与标准内核差异说明

Application Notes 4 驱动代码4.4 Hi3510网口及phy驱动

其中有关eth的相关代码为Hi3560网口驱动程序,与Hi3510无关。

z./drivers/net/hisilicon

./drivers/net/hisilicon/Kconfig

./drivers/net/hisilicon/Makefile

./drivers/net/hisilicon/sf

./drivers/net/hisilicon/sf/SF_Reg.h

./drivers/net/hisilicon/sf/SF_RegStruct.h

./drivers/net/hisilicon/sf/Kconfig

./drivers/net/hisilicon/sf/Makefile

./drivers/net/hisilicon/sf/realtek.c

./drivers/net/hisilicon/sf/SF_TypeDef.h

./drivers/net/hisilicon/sf/hisilicon-sf.h

./drivers/net/hisilicon/sf/intel.c

./drivers/net/hisilicon/sf/sf_api.h

./drivers/net/hisilicon/sf/hisilicon-sf.c

./drivers/net/hisilicon/sf/micrel.c

./drivers/net/hisilicon/sf/SF_API.c

./drivers/net/hisilicon/phy

./drivers/net/hisilicon/phy/Kconfig

./drivers/net/hisilicon/phy/Makefile

./drivers/net/hisilicon/phy/phy.c

./drivers/net/hisilicon/phy/phy.h

./drivers/net/hisilicon/oshal-net.h

drivers/net/hisilicon/eth

drivers/net/hisilicon/eth/Hi3560_Eth.c

drivers/net/hisilicon/eth/Hi3560_Eth.h

./drivers/net/hisilicon/eth/Makefile

./drivers/net/hisilicon/eth/ETH_Struct.h

./drivers/net/hisilicon/eth/ETH_CTL.c

./drivers/net/hisilicon/eth/ETH_TypeDef.h

./drivers/net/hisilicon/eth/ETH_OS.c

./drivers/net/hisilicon/eth/ETH_FunctionList.h

./drivers/net/hisilicon/eth/ETH_Reg.h

新增目录及文件,包含Hi3510 sf驱动,Hi3560 eth驱动及phy驱动。

z./drivers/net/Kconfig

4 驱动代码

Hi3510 Linux内核与标准内核差

异说明

Application Notes

修改文件,增加Hi3510网口驱动配置菜单,增加内容为:

source "drivers/net/hisilicon/Kconfig"

z./drivers/net/Makefile

修改文件,增加Hi3510网口驱动编译规则。

obj-$(CONFIG_HISILICON_SF) += hisilicon/

obj-$(CONFIG_HISILICON_ETH) += hisilicon/

4.5 Hi3510 mtd_ram驱动

z./drivers/mtd/maps/plat-ram.c

修改文件,增加内容如下:

?增加头文件。

#include

#include

?增加mtd map操作函数。

/* mtd-ram map functions */

static map_word __xipram mtdram_map_read(struct map_info *map, unsigned long

ofs)

{

map_word r;

if(map->cached ==NULL)

return inline_map_read(map, ofs);

if (map_bankwidth_is_1(map))

r.x[0] =*((char*)map->cached + ofs);

else if (map_bankwidth_is_2(map))

r.x[0] =*(unsigned short*)((char*)map->cached + ofs);

else if (map_bankwidth_is_4(map))

r.x[0] =*(unsigned long*)((char*)map->cached + ofs);

#if BITS_PER_LONG >= 64

else if (map_bankwidth_is_8(map))

r.x[0] =*(unsigned long long*)((char*)map->cached + ofs);

#endif

else if (map_bankwidth_is_large(map))

memcpy(r.x, map->cached+ofs, map->bankwidth);

return r;

}

Hi3510 Linux内核与标准内核差异说明

Application Notes 4 驱动代码static void __xipram mtdram_map_write(struct map_info *map, const map_word

datum, unsigned long ofs)

{

if(map->cached == NULL)

{

inline_map_write(map, datum, ofs);

return;

}

if (map_bankwidth_is_1(map))

*(char *)((char*)map->cached + ofs) = datum.x[0];

else if (map_bankwidth_is_2(map))

*(unsigned short *)((char*)map->cached + ofs) = datum.x[0];

else if (map_bankwidth_is_4(map))

*(unsigned long *)((char*)map->cached + ofs) = datum.x[0];

#if BITS_PER_LONG >= 64

else if (map_bankwidth_is_8(map))

*(unsigned long long *)((char*)map->cached + ofs) = datum.x[0];

#endif

else if (map_bankwidth_is_large(map))

memcpy(map->virt+ofs, datum.x, map->bankwidth);

mb();

}

static void __xipram mtdram_map_copy_from(struct map_info *map, void *to,

unsigned long from, ssize_t len)

{

inline_map_copy_from(map, to, from, len);

}

static void __xipram mtdram_map_copy_to(struct map_info *map, unsigned long to,

const void *from, ssize_t len)

{

if(map->cached)

memcpy(map->cached + to, from, len);

else

inline_map_copy_to(map, to, from, len);

}

static void mtdram_map_init(struct map_info *map)

{

BUG_ON(!map_bankwidth_supported(map->bankwidth));

4 驱动代码

Hi3510 Linux内核与标准内核差

异说明

Application Notes

map->read =mtdram_map_read;

map->write =mtdram_map_write;

map->copy_from =mtdram_map_copy_from;

map->copy_to =mtdram_map_copy_to;

}

/* end of */

?在函数static int platram_remove(struct device *dev)中,在

if (info->map.virt != NULL)

iounmap(info->map.virt);

后增加:

if (info->map.cached != NULL)

iounmap(info->map.cached);

?在函数static int platram_probe(struct device *dev)中,将内容:info->https://www.360docs.net/doc/667617380.html, = pdata->mapname != NULL ? pdata->mapname : pd->name;

修改为:

info->https://www.360docs.net/doc/667617380.html, = pdata->mapname != NULL ? pdata->mapname : (char

*)pd->name;

将内容:

/* remap the memory area */

info->map.virt = ioremap(res->start, info->map.size);

dev_dbg(dev, "virt %p, %lu bytes\n", info->map.virt, info->map.size);

if (info->map.virt == NULL) {

dev_err(dev, "failed to ioremap() region\n");

err =-EIO;

goto exit_free;

}

simple_map_init(&info->map);

修改为:

/* remap the memory area */

if(res->flags &= IORESOURCE_CACHEABLE) {

info->map.cached =ioremap_cached(res->start, info->map.size);

dev_dbg("cached %p, %lu bytes\n", info->map.cached, info->map.size);

if (info->map.cached == NULL) {

dev_err(dev, "failed to ioremap_cached() region\n");

err =-EIO;

Hi3510 Linux内核与标准内核差异说明

Application Notes 4 驱动代码

goto exit_free;

}

}

else

{

info->map.virt =ioremap(res->start, info->map.size);

dev_dbg(dev, "virt %p, %lu bytes\n", info->map.virt, info->map.size);

if (info->map.virt ==NULL)

{

dev_err(dev, "failed to ioremap() region\n");

err =-EIO;

goto exit_free;

}

}

mtdram_map_init(&info->map);

将内容:

#ifdef CONFIG_MTD_PARTITIONS

if (pdata->nr_partitions > 0) {

const char **probes = { NULL };

if (pdata->probes)

probes =(const char **)pdata->probes;

err =parse_mtd_partitions(info->mtd, probes,

&info->partitions, 0);

if (err > 0)

{

err =add_mtd_partitions(info->mtd, info->partitions, err);

}

}

#endif /* CONFIG_MTD_PARTITIONS */

if (add_mtd_device(info->mtd)) {

dev_err(dev, "add_mtd_device() failed\n");

err =-ENOMEM;

}

修改为:

#ifdef CONFIG_MTD_PARTITIONS

4 驱动代码

Hi3510 Linux内核与标准内核差

异说明

Application Notes

if (pdata->nr_partitions > 0)

{

if (pdata->probes)

{

const char **probes =(const char **)pdata->probes;

err =parse_mtd_partitions(info->mtd, probes,&info->partitions, 0);

if (err > 0)

{

err =add_mtd_partitions(info->mtd, info->partitions,err);

}

}

if(pdata->partitions)

err =add_mtd_partitions(info->mtd, pdata->partitions,

pdata->nr_partitions);

}

#endif /* CONFIG_MTD_PARTITIONS */

if (!(pdata->nr_partitions > 0))

{

if (add_mtd_device(info->mtd))

{

dev_err(dev, "add_mtd_device() failed\n");

err = -ENOMEM;

}

}

4.6 Hi3510 USB驱动

z./drivers/usb/host/hisilicon/ohci-hi3510.c

新增文件,Hi3510 USB驱动代码。

z./drivers/usb/host/ohci-hcd.c

修改文件,增加Hi3510 USB模块,增加内容为:

#ifdef CONFIG_ARCH_HI3510

#include "hisilicon/ohci-hi3510.c"

#endif

以及文件尾的定义中增加

|| defined (CONFIG_ARCH_HI3510) \

z./drivers/usb/Kconfig

修改文件,增加Hi3510配置,增加内容为:

相关文档
最新文档