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配置,增加内容为: