文档库 最新最全的文档下载
当前位置:文档库 › ARM2440uboot移植过程.

ARM2440uboot移植过程.

ARM2440uboot移植过程.
ARM2440uboot移植过程.

详细的boorloader的移植(1)

北京顶嵌嵌入式培训机构 2009-09-14 16:52:23 作者:赵老师来源:顶嵌

技术部文字大小:[大][中][小]

一.BootLoader简介

简单的说bootloader是一段程序,它的作用就是加载操作系统,BootLoader(引导加载程序)是系统加电后运行的第一段软件代码。通过这段代码实现硬件的初始化,建立内存空间的映射图,为操作系统内核准备好硬件环境并引导内核的启动。如右图所示的那样在设备的启动过程中bootloader位于最底层,首先被运行来引导操作系统运行,很容易可以看出 bootloader是底层程序所以它的实现严重地依赖于硬件,特别是在嵌入式世界。因此,在嵌入式世界里建立一个通用的BootLoader几乎是不可能的。尽管如此,一些功能强大、支持硬件环境较多的BootLoader也被广大的使用者和爱好者所支持,从而形成了一些被广泛认可的、较为通用的的bootlo ader实现。简单的介绍几种:

1.U-BOOT

uboot是一个庞大的公开源码的软件。他支持一些系列的arm体系,包含常见的外设的驱动,是一个功能强大的板极支持包。其代码可以从下载 U-BOOT是由PPCBO OT发展起来的,是PowerPC、ARM9、Xscale、X86等系统通用的Boot方案,从官方版本 0.3.2开始全面支持SC系列单板机。u-boot是一个开源的bootloader。

2.vivi

vivi是韩国mizi 公司开发的bootloader, 适用于ARM9处理器。 Vivi有两种工作模式:启动加载模式和下载模式。启动加载模式可以在一段时间后(这个时间可更改)自行启动linux内核,这是vivi的默认模式。如果修改或更新需要进入下载模式,在下载模式下,vivi为用户提供一个命令行接口通过接口可以使用vivi提供的一些命令,来实现flash的烧写、管理、操作mtd分区信息、启动系统等功能。

由于u-boot的通用性好,功能全面,适合初学者学习和使用,我们选用u-boot作为基准代码,在此基础上进行修改,完成移植工作。

二.移植准备

1.目标板:

这是进行U-Boot移植首先要明确的。可以根据目标板上CPU、FLASH、SDRAM的情况,以尽可能相一致为原则,先找出一个与所移植目标板为同一个或同一系列处理器的U-Boot支持板为移植参考板。

以上图片是本次移植所用到的开发板实物图

一些重要参数如下:

CPU处理器

–Samsung S3C2440AL,主频400MHz,最高533MHz。

SDRAM内存

–板载64MB SDRAM

–32bit数据总线

–SDRAM时钟频率高达100MHz

–Hynix809E

Flash存储器

–板载64MB Nand Flash,掉电非易失

–板载2MB Nor Flash

K9F1208u00

详细的boorloader的移植(2)

北京顶嵌嵌入式培训机构 2009-09-14 16:53:41 作者:赵老师来源:顶嵌

技术部文字大小:[大][中][小]

详细的boorloader的移植二

网卡

–DM9000EP

2.源文件:

选择一标准的u-boot代码:u-boot-1.1.6

3.烧写工具:

u-boot的烧写使用JTAG线进行下载,用SJF2440.exe软件进行烧写,使用DNW终端进行串口调试。用串口线相连。

4.知识储备:

u-boot代码:

由于代码比较庞大,只简单分析启动部分。网络和书很多书中有详细的分析,如果想详细了解查阅相关资料,或着提出讨论,还可以登陆顶嵌公司网站技术文档里查看。网

址:https://www.wendangku.net/doc/f716682087.html,/jiaoshi/html/?320.html

U-Boot启动过程可以分成两个阶段(stage)

下面是u-boot启动过程的流程图其中左右两部分分别是启动过程的两个阶段

第一阶段(stage 1)是依赖于CPU体系结构的代码(如设备初始化代码等),一般用汇编语言来实现。主要进行以下方面的设置:设置ARM进入SVC模式、禁止IRQ和FIQ、关闭看门狗、屏蔽所有中断。设置时钟(FCLK,HCLK,PCLK)、清空I/D cache、清空TLB、禁止MMU 和cache、配置内存控制器、为搬运代码做准备、搬移uboot映像到RAM中(使用copy_loop 实现)、分配堆栈、清空bss段(使用clbss_l实现)。

第二阶段(stage 2)通常用C语言来实现。

start_armboot():

一系列初始化(cpu, 板卡,中断,串口,控制台等),开启I/D cache。初始化FLASH,根据系统配置执行其他初始化操作。打印LOG,使能中断,获取环境变量,初始化网卡。最后进入main_loop()函数。在main_loop函数中会检查bootdelay和bootcmd环境变量,如果bootcmd已经设置过,则在等待bootdelay个毫秒后会自动执行bootcmd。如果等待过程中被用户中断(ctl+c)或者bootcmd没有设置,则会等待用户输入命令。

关键点一:U-Boot移植参考板

这是进行U-Boot移植首先要明确的。可以根据目标板上CPU、FLASH、SDRAM的情况,以尽可能相一致为原则,先找出一个与所移植目标板为同一个或同一系列处理器的U-Boot 支持板为移植参考板。对U-Boot移植新手,建议依照循序渐进的原则,目标板文件名暂时先用移植参考板的名称,在逐步熟悉U-Boot移植基础上,再考虑给目标板重新命名。在实际移植过程中,可用Linux命令查找移植参考板的特定代码,如 grep –r 2410 ./ 可确定出在U-Boot中与smdk2410板有关的代码,依此对照目标板实际进行屏蔽或修改。同时应不局限于移植参考板中的代码,要广泛借鉴U-Boot 中已有的代码更好地实现一些具体的功能。

关键点二:U-Boot烧写地址和CPU寄存器参数设置

不同目标板,对U-Boot在FLASH中存放地址要求不尽相同。事实上,这是由处理器中断复位向量来决定的,与主板硬件相关。也就是说,U-Boot烧写具体位置是由硬件决定的,而不是程序设计来选择的。

根据CPU处理器系列、类型不同,寄存器名称与作用有一定差别。必须根据目标板的实际,进行合理配置。一个较为可行和有效的方法,就是借鉴参考移植板的配置,再根据目标板实际,进行合理修改。这是一个较费时间和考验耐力的过程,需要仔细对照处理器各寄存器定义、参考设置、目标板实际作出选择并不断测试。

关键点三:串口调试。

能从串口输出信息,即使是乱码,也可以说U-Boot移植取得了实质性突破。依据笔者调试经历,串口是否有输出,除了与串口驱动相关外,还与FLASH相关的寄存器设置有关。因为U-Boot是从FLASH中被引导启动的,如果 FLASH设置不正确,U-Boot代码读取和执行就会出现一些问题。因此,还需要就FLASH的相关寄存器设置进行一些参数调试。同时,要注意串口收发芯片相关引脚工作波形。依据笔者调试情况,如果串口无输出,有一种可能就是该芯片损坏或工作不正常。如果出现乱码,有一种可能就是波特率等参数设置有问题。

三.修改源代码:

1.添加新开发板信息

(1)顶层Makefile:为了能让u-boot在编译之前根据此规则来获得具体的配置文件和编译规则。

在smdk2410_config : unconfig

@$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 NULL s3c24x0

(2)建立新开发板目录:可以把类似的开发板进行修改

cd board

mkdir tq2440

cd tq2440

cp -arf ../smdk2410/* .

mv smdk2410.c tq2440.c

(3)修改board/tq2440/u-boot.lds

并在tq2440目录下新建boot_init.c文件,内容参考源文件,该代码主要实现了CopyCode2Ram 函数,该函数功能是拷贝flash代码到sdram中,实现原理如下图。

详细的boorloader的移植(3)

北京顶嵌嵌入式培训机构 2009-09-15 14:52:56 作者:杨老师来源:顶嵌

技术部文字大小:[大][中][小]

详细的boorloader的移植三

CopyCode2Ram

函数实现原理

(5)修改tq2440.c

增加宏定义:

S3C2440的主时钟源来自外部晶振(XTIPLL)或外部时钟(EXTCLK)。S3C2440有两个PLL(phase locked loop)一个是MPLL,一个是UPLL。MPLL用于CPU及其他外围器件,

UPLL用于USB。

【1】MPLL, 用于产生FCLK,HCLK,PCLK三种频率,这三种频率分别有不同的用途:

FCLK是CPU提供的时钟信号。

HCLK是为AHB总线提供的时钟信号,Advanced High-performance Bus,主要用于高速外设,比如内存控制器,中断控制器,LCD控制器,DMA 等。

从S3C2440的DataSheet里可以看到,S3C2440最大支持400MHz的主频,但是这并不意味着一定工作在400MHz下面,可以通过设定MPLL, UPLL寄存器来设定CPU的工作频率。

PCLK是为APB总线提供的时钟信号,Advanced Peripherals Bus,主要用于低速外设,比如看门狗,UART控制器,IIS, I2C,SDI/MMC, GPIO,RTC and SPI等。

【2】UPLL,专门用于驱动USB host/Device。并且驱动USB host/Device的频率必须为48MHz。

如果要设置MPLL和UPLL,要注意它们的先后顺序,MPLL和UPLL的设定是有前后顺序的,必须先设定UPLL,然后才能设定MPLL,而且中间需要大约7个空指令(NOP)的间隔。

定义MPLL/UPLL/CLKDIV,参考S3C2440芯片用户手册,参考255页内容如下:

#define S3C2440_CLKDIV 0x05 /* FCLK:HCLK:PCLK = 1:4:8 */

该寄存器参考内如下:

修改board_init函数如下:

详细的boorloader的移植(4)

北京顶嵌嵌入式培训机构 2009-09-15 14:53:42 作者:赵老师来源:顶嵌

技术部文字大小:[大][中][小]

详细的boorloader的移植四

(6)lowlevel_init.S

#define B1_BWSCON (DW32)修改为#define B1_BWSCON (DW16)

#define B5_BWSCON (DW16)修改为#define B5_BWSCON (DW8)

#define REFCNT 1113 /* period=15.6us, HCLK=60Mhz, (2048+1-15.6*60) */

修改为

#define REFCNT 0x4f4/*period=7.8125us,HCLK=100Mhz, (2048+1-7.8125*100) */

二. 头文件修改include/configs/tq2440.h

(1)cp include/configs/smdk2410.h include/configs/tq2440.h

(2)增加宏定义:

#define CONFIG_DRIVER_DM9000 1

#define CONFIG_DM9000_BASE 0x20000300

#define DM9000_IO CONFIG_DM9000_BASE

#define DM9000_DATA (CONFIG_DM9000_BASE + 4)

#define CONFIG_DM9000_USE_16BIT

#define CONFIG_SETUP_MEMORY_TAGS 1

#define CONFIG_CMDLINE_TAG 1

(3)#define CONFIG_COMMANDS \中增加如下三项:

CFG_CMD_PING | \

CFG_CMD_JFFS2 | \

CFG_CMD_NAND | \

(4)修改网络相关参数:

#define CONFIG_BOOTDELAY 1

#define CONFIG_BOOTARGS "noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0" #define CONFIG_ETHADDR 0a:1b:2c:3d:4e:5f

#define CONFIG_NETMASK 255.255.255.0

#define CONFIG_IPADDR 192.168.1.6

#define CONFIG_SERVERIP 192.168.1.8

(5)#define CONFIG_AMD_LV400 1 /* uncomment this if you have a LV400 flash */

#if 0

#define CONFIG_AMD_LV800 1 /* uncomment this if you have a LV800 flash */

#endif

修改为:

#if 0

#define CONFIG_AMD_LV400 1 /* uncomment this if you have a LV400 flash */

#endif

#define CONFIG_AMD_LV800 1 /* uncomment this if you have a LV800 flash */

(6) 在最后#endif /* __CONFIG_H */前增加NAND相关宏定义:

#define CFG_NAND_BASE 0

#define CFG_MAX_NAND_DEVICE 1

#define NAND_MAX_CHIPS 1

三. 修改cpu/arm920t/start.S

(1) #elif defined(CONFIG_S3C2410)后添加:

# define INTMOD 0X4A000004

(2)将

/* FCLK:HCLK:PCLK = 1:2:4 */

/* default FCLK is 120 MHz ! */

ldr r0, =CLKDIVN

mov r1, #3

str r1, [r0]

修改为:

#if 0

/* FCLK:HCLK:PCLK = 1:2:4 */

/* default FCLK is 120 MHz ! */

ldr r0, =CLKDIVN

mov r1, #3

str r1, [r0]

#endif

(3) 在

bl cpu_init_crit

#endif后面加上

/* Set up the stack */

stack_setup:

ldr r0, _TEXT_BASE /* upper 128 KiB: relocated uboot */

sub r0, r0, #CFG_MALLOC_LEN /* malloc area */

sub r0, r0, #CFG_GBL_DATA_SIZE /* bdinfo */

sub sp, r0, #12 /* leave 3 words for abort-stack */

bl clock_init

(4) 将下列代码替换

#ifndef CONFIG_SKIP_RELOCATE_UBOOT

relocate: /* relocate U-Boot to RAM */

adr r0, _start /* r0 <- current position of code */

ldr r1, _TEXT_BASE /* test if we run from flash or RAM */

cmp r0, r1 /* don't reloc during debug */

beq stack_setup

ldr r2, _armboot_start

ldr r3, _bss_start

sub r2, r3, r2 /* r2 <- size of armboot */

add r2, r0, r2 /* r2 <- source end address */

copy_loop:

ldmia r0!, {r3-r10} /* copy from source address [r0] */

stmia r1!, {r3-r10} /* copy to target address [r1] */

cmp r0, r2 /* until source end addreee [r2] */

ble copy_loop

#endif /* CONFIG_SKIP_RELOCATE_UBOOT */

/* Set up the stack */

stack_setup:

ldr r0, _TEXT_BASE /* upper 128 KiB: relocated uboot */

sub r0, r0, #CFG_MALLOC_LEN /* malloc area */

sub r0, r0, #CFG_GBL_DATA_SIZE /* bdinfo */

#ifdef CONFIG_USE_IRQ

sub r0, r0, #(CONFIG_STACKSIZE_IRQ+CONFIG_STACKSIZE_FIQ)

详细的boorloader的移植(5)

北京顶嵌嵌入式培训机构 2009-09-16 14:01:49 作者:赵老师来源:顶嵌

技术部文字大小:[大][中][小]

详细的boorloader的移植五

#endif

sub sp, r0, #12 /* leave 3 words for abort-stack */

替换为:

#ifndef CONFIG_SKIP_RELOCATE_UBOOT

relocate: /* relocate U-Boot to RAM */

adr r0, _start /* r0 <- current position of code */

ldr r1, _TEXT_BASE /* test if we run from flash or RAM */

cmp r0, r1 /* don't reloc during debug */ beq clear_bss

ldr r2, _armboot_start

ldr r3, _bss_start

sub r2, r3, r2 /* r2 <- size of armboot */

#if 1

bl CopyCode2Ram /* r0: source, r1: dest, r2: size */

#else

add r2, r0, r2 /* r2 <- source end address */

copy_loop:

ldmia r0!, {r3-r10} /* copy from source address [r0] */

stmia r1!, {r3-r10} /* copy to target address [r1] */

cmp r0, r2 /* until source end addreee [r2] */

ble copy_loop

#endif

#endif /* CONFIG_SKIP_RELOCATE_UBOOT */

4.相关头文件

(1) include/s3c24x0.h

在下面结构体中添加S3C24X0_REG32 CAMDIVN;

typedef struct {

S3C24X0_REG32 LOCKTIME;

S3C24X0_REG32 MPLLCON;

S3C24X0_REG32 UPLLCON;

S3C24X0_REG32 CLKCON;

S3C24X0_REG32 CLKSLOW;

S3C24X0_REG32 CLKDIVN;

}

添加NAND寄存器结构体

/* NAND FLASH (see S3C2440 manual chapter 6, https://www.wendangku.net/doc/f716682087.html,) */ typedef struct {

S3C24X0_REG32 NFCONF;

S3C24X0_REG32 NFCONT;

S3C24X0_REG32 NFCMD;

S3C24X0_REG32 NFADDR;

S3C24X0_REG32 NFDATA;

S3C24X0_REG32 NFMECCD0;

S3C24X0_REG32 NFMECCD1;

S3C24X0_REG32 NFSECCD;

S3C24X0_REG32 NFSTAT;

S3C24X0_REG32 NFESTAT0;

S3C24X0_REG32 NFESTAT1;

S3C24X0_REG32 NFMECC0;

S3C24X0_REG32 NFMECC1;

S3C24X0_REG32 NFSECC;

S3C24X0_REG32 NFSBLK;

S3C24X0_REG32 NFEBLK;

} /*__attribute__((__packed__))*/ S3C2440_NAND;

(2) cpu/arm920t/s3c24x0/speed.c

【1】在#define MPLL 0

#define UPLL 1上面增加

DECLARE_GLOBAL_DATA_PTR;

【2】在m = ((r & 0xFF000) >> 12) + 8;

p = ((r & 0x003F0) >> 4) + 2;

s = r & 0x3;后面增加

/* support both of S3C2410 and S3C2440 */

if (gd->bd->bi_arch_number == MACH_TYPE_SMDK2410)

return((CONFIG_SYS_CLK_FREQ * m) / (p << s));

else

return((CONFIG_SYS_CLK_FREQ * m * 2) / (p << s)); /* S3C2440 */【3】增加宏定义

/* for s3c2440 */

#define S3C2440_CLKDIVN_PDIVN (1<<0)

#define S3C2440_CLKDIVN_HDIVN_MASK (3<<1)

#define S3C2440_CLKDIVN_HDIVN_1 (0<<1)

#define S3C2440_CLKDIVN_HDIVN_2 (1<<1)

#define S3C2440_CLKDIVN_HDIVN_4_8 (2<<1)

#define S3C2440_CLKDIVN_HDIVN_3_6 (3<<1)

#define S3C2440_CLKDIVN_UCLK (1<<3)

#define S3C2440_CAMDIVN_CAMCLK_MASK (0xf<<0)

#define S3C2440_CAMDIVN_CAMCLK_SEL (1<<4)

#define S3C2440_CAMDIVN_HCLK3_HALF (1<<8)

#define S3C2440_CAMDIVN_HCLK4_HALF (1<<9)

#define S3C2440_CAMDIVN_DVSEN (1<<12)

【4】get_HCLK get_PCLK函数修改

ulong get_HCLK(void)

{

S3C24X0_CLOCK_POWER * const clk_power = S3C24X0_GetBase_CLOCK_POWER();

unsigned long clkdiv;

unsigned long camdiv;

int hdiv = 1;

/* support both of S3C2410 and S3C2440 */

if (gd->bd->bi_arch_number == MACH_TYPE_SMDK2410)

return((clk_power->CLKDIVN & 0x2) ? get_FCLK()/2 : get_FCLK());

else

详细的boorloader的移植(6)

北京顶嵌嵌入式培训机构 2009-09-16 14:02:30 作者:赵老师来源:顶嵌

技术部文字大小:[大][中][小]

详细的boorloader的移植六

{

clkdiv = clk_power->CLKDIVN;

camdiv = clk_power->CAMDIVN;

/* work out clock scalings */

switch (clkdiv & S3C2440_CLKDIVN_HDIVN_MASK) {

case S3C2440_CLKDIVN_HDIVN_1:

hdiv = 1;

break;

case S3C2440_CLKDIVN_HDIVN_2:

hdiv = 2;

break;

case S3C2440_CLKDIVN_HDIVN_4_8:

hdiv = (camdiv & S3C2440_CAMDIVN_HCLK4_HALF) ? 8 : 4;

break;

case S3C2440_CLKDIVN_HDIVN_3_6:

hdiv = (camdiv & S3C2440_CAMDIVN_HCLK3_HALF) ? 6 : 3;

break;

}

return get_FCLK() / hdiv;

}

}

/* return PCLK frequency */

ulong get_PCLK(void)

{

S3C24X0_CLOCK_POWER * const clk_power =

S3C24X0_GetBase_CLOCK_POWER();

unsigned long clkdiv;

unsigned long camdiv;

int hdiv = 1;

/* support both of S3C2410 and S3C2440 */

if (gd->bd->bi_arch_number == MACH_TYPE_SMDK2410)

return((clk_power->CLKDIVN & 0x1) ? get_HCLK()/2 : get_HCLK());

else

{

clkdiv = clk_power->CLKDIVN;

camdiv = clk_power->CAMDIVN;

/* work out clock scalings */

switch (clkdiv & S3C2440_CLKDIVN_HDIVN_MASK) {

case S3C2440_CLKDIVN_HDIVN_1:

hdiv = 1;

break;

case S3C2440_CLKDIVN_HDIVN_2:

hdiv = 2;

break;

case S3C2440_CLKDIVN_HDIVN_4_8:

hdiv = (camdiv & S3C2440_CAMDIVN_HCLK4_HALF) ? 8 : 4;

break;

case S3C2440_CLKDIVN_HDIVN_3_6:

hdiv = (camdiv & S3C2440_CAMDIVN_HCLK3_HALF) ? 6 : 3;

break;

}

return get_FCLK() / hdiv / ((clkdiv & S3C2440_CLKDIVN_PDIVN)? 2:1);

}

(3) common/env_nand.c

// puts ("*** Warning - bad CRC or NAND, using default environment\n\n"); //HJ_del 注释此句

(4) include/nand.h

struct nand_write_options {结构体中添加

int skipfirstblk; /* if true, skip the first good block*/

(5) include/s3c2410.h

添加:

/* for s3c2440, https://www.wendangku.net/doc/f716682087.html, */

static inline S3C2440_NAND * const S3C2440_GetBase_NAND(void)

{

return (S3C2440_NAND * const)S3C2410_NAND_BASE;

}

5.增加函数实现

(1)common/cmd_load.c

【1】增加函数声明

/* support xmodem*/

static ulong load_serial_xmodem (ulong offset);

并后面添加其函数实现:

/* support xmodem */

static ulong load_serial_xmodem (ulong offset)

{

int size;

char buf[32];

int err;

int res;

connection_info_t info;

char xmodemBuf[1024];

ulong store_addr = ~0;

ulong addr = 0;

size = 0;

info.mode = xyzModem_xmodem;

res = xyzModem_stream_open (&info, &err);

if (!res) {

while ((res =

xyzModem_stream_read (xmodemBuf, 1024, &err)) > 0) {

store_addr = addr + offset;

size += res;

addr += res;

#ifndef CFG_NO_FLASH

if (addr2info (store_addr)) {

int rc;

rc = flash_write ((char *) xmodemBuf,

store_addr, res);

if (rc != 0) {

flash_perror (rc);

return (~0);

}

} else

#endif

{

memcpy ((char *) (store_addr), xmodemBuf,

res);

}

}

ZC301摄像头移植

摄像头驱动的移植(ZC3XX) 一、普通设计 第一:首先确保所用的FS2410开发板上移植的是Linux-2.6.22.6内核,USB 及CS8900A均能工作 第二:移植驱动gspcav1-20071224.tar.gz: ( 1 ) 在linux-2.6.22.6/drivers/usb 目录下新建media 目录,将gspcav1-20071224.tar.gz copy 到 media 下并解压。为了使media 编译进内核,需修改linux-2.6.22.6/drivers/usb 目录下的Kconfig、Makefile 文件。具体操作: [linux@weijing usb]$ vi Kconfig 添加下面语句: source "drivers/usb/media/Kconfig" [linux@weijing usb]$ vi Makefile 添加下面语句: obj-$(CONFIG_USB_SPCA5XX) += media/ ( 2 )为添加 gspcav1-20071224 编译选项,在 media 下新建 Kconfig、Makefile 文件。 [linux@weijing media]$ vi Kconfig # # USB Multimedia device configuration # comment "USB Multimedia devices" depends on USB config USB_SPCA5XX tristate "USB SPCA5XX Sunplus/Vimicro/Sonix jpeg Cameras" depends on USB && VIDEO_DEV ---help--- Say Y or M here is you want to use one of these wedcams: The built-in microphone is enabled by selecting USB Audio support.

android系统开发工作介绍

android系统开发工作介绍 一、android的开发工作 Android的开发分为三个类型:移植开发移动设备系统;android系统级开发和应用程序开发。 1、移植开发移动设备系统 2、Android系统级开发,指的是扩展android的框架或者是修改bug,这方面比较少,除非有些开发移动设备的厂商,比如做gps,可以往里面加入一些自己的特定系统东西,这可能导致一些不兼容。当然也可能是简单的修复bug,详细的内容后面还有说。 3、开发应用程序,这应该是比较主流的开发,也就是给android系统写应用程序。当然我们这里主要是研究android的framework如何给这些应用程序提供服务的。 总结一下,我们可以把android分为四个层次,从底层往上依次为:linux内核、C/C++库、java 框架和java应用程序。移植开发移动设备涉及到linux内核(包括其驱动);android系统级开发涉及到C/C++库的开发及给上层java框架;android应用程序开发就是调用java的框架写应用程序。 简单的从上到下,android应用程序需要有java框架支持,比如它要发送短信,就需要java 框架,java框架其实就是将C/C++库包装成为了一个JNI,而实现具体的功能是C/C++库,最后驱动硬件完成功能,这也就是linux内核部分。 所谓framework,也就是系统级开发,这将是本文的重点,虽然android的framework 开发比较少,但是对其了解后更有利于整体开发的进行,当然很多设备厂商还是非常需这要些的。 二、android系统架构

Linux内核及驱动、C/C++框架、java框架、java应用程序。 1)、Linux内核及驱动 其中linux内核及驱动是内核层的(本人对linux内核也有过痴迷的时候,就像现在android 痴迷一样),系统总是需要操作系统的支持的,比如内存管理、进程管网理、络协议栈等。 2)、android的C/C++框架 系统C库:用的是libc,没什么好说的,C程序员都知道。多媒体库SurFace Manager:显示子系统的管理器LibWebCore:web浏览器引擎,支持android浏览器SGL:skia图形库,底层的2D图形引擎 3D库:OpenGL FreeType:字体显示Android的运行环境,这个也应该属于这个框架里面的,android的虚拟机叫做Dalvik,运行环境就是由这个虚拟机和基础的java类库组成。 3)、android应用框架 提供一系列的服务和系统,包括视图、内容提供器、资源管理器、通知管理器活、动管理器。 视图非常丰富:list、grid、text box、button等。内容提供器是使得应用程序可以访问另一个程序的数据。资源管理器是提供访问非代码的资源访问,如布局文件。通知管理器,使得程序可以在状态栏中显示自定义的提示信息。活动管理器,用来管理程序生命周期。 4)、android应用程序Android所有的应用程序都是用java写的,当然现在好像也支持一些脚本语言,如 ruby,但是不支持C开发,所谓支持C开发是指jni的形式。 。。。。。。。。。

关于【野火】OV7725例程移植【OV7670】总结

关于OV7725程序移植OV7670总结 用了三天的时间,终于搞定了程序的移植。也是第一次移植stm32程序。 最终的移植成功版本,改了SCCB通信、FIFO读写时序、寄存器配置、引脚修改的一些地方。 一、移植过程中SCCB通信遇到的问题 1.由于野火的OV7725摄像头内置上拉电阻,所以在配置时SDA和SDL都被设置成了Mode_OD (开漏模式),但是战舰带的OV7670摄像头并没有内置上拉电阻,所以不能用开漏模式,否则不能正常输出高电平,SDA线也不会被主机拉高。 于是参考了战舰的例程。战舰对SCL线设置为了PP(推挽输出模式),SDA线的输出则需要切换。如下: 在战舰的例程上进行修改时,由于需要修改一些IO口,所以需要把这句改掉。我尝试用这样的手法修改: 发现并不可行。查询网络,原因可能是在运行中途修改管脚模式时,由于32的LCKK:锁密钥,并不能直接修改管脚工作模式。我们选择对底层寄存器进行操作。。

于是乎这样改: *注:SDA为PC7口。 2. 还有需要修改的地方就是:在需要读取SDA电平状态的时候,要用SCCB_SDA_IN 这个语句把替换掉SDA_H,而不是先SDA_H 然后再SCCB_SDA_IN 。否则不能正确读取到SDA线的电平。 3.最后一步,器件ID: 在这一段代码用到: 二、FIFO读数据时序的修改 1.由于每个人选择的数据口可能不同,有的是0-7位,有的是8-15位,所以我这里给出了两种不同的读取时序。 H_MY_READ_FIFO_PIXEL(YUV)是当数据位选择的是8-15位时候用的; L_MY_READ_FIFO_PIXEL(YUV)是当数据位选择的是0-7位时候用的。 *注:因为我要的二值化的图像,所以只读取了YUV 分量中的Y分量。

安卓Android ROM定制、移植:第六篇:boot.img、recovery解包和打包

太抱歉了,因为教程实在是有点粗浅了,其实很多东西都不知道怎么去写,这不是复制粘贴,当然很多只是一步步的走的,不过也许我自己觉得已经阐述的很清楚了,可是一旦别人看起来,还是感觉很深奥,没办法,本人就这点能力了,呵呵! 大家都知道安卓的核心更换呢,那是在boot.img里面,那么如何在WINDOWS下去解开它呢,LINUX的自己略过。。。。 首先百度BOOTIMG.EXE,然后你懂的,会出来一大堆,这得感谢制作bootimg.exe的作者,本来是为华为的机器做的分解工具,不过我们也可以拿来分解boot.img、recovery.img等,OK!先来谈谈这两个文件的基础,部分来自网络。 boot和recovery映像的文件结构 boot和recovery映像并不是一个完整的文件系统,它们是一种android自定义的文件格式,该格式包括了2K的文件头,后面紧跟着是用gzip压缩过的内核,再后面是一个ramdisk 内存盘,然后紧跟着第二阶段的载入器程序(这个载入器程序是可选的,在某些映像中或许没有这部分)。此类文件的定义可以从源代码android-src/system/core/mkbootimg找到一个叫做bootimg.h的文件。 (译者的话,原文是一个叫做mkbootimg.h的文件,但从Android 2.1的代码来看,该文件名应该是改为bootimg.h了)。 /* ** +-----------------+ ** | boot header | 1 page ** +-----------------+ ** | kernel | n pages ** +-----------------+ ** | ramdisk | m pages ** +-----------------+ ** | second stage | o pages ** +-----------------+

监控摄像机安装的详细流程教学提纲

监控摄像机安装的详 细流程

监控摄像机安装的详细流程与细节 监控摄像头的安装方法: 1) 在满足监视目标视场范围要求的条件下,其安装高度:室内离地不宜低于2.5m;室外离地不宜低于3.5m。 2) 监控摄像头及其配套装置,如镜头、防护罩、支架、雨刷等,安装应牢固,运转应灵活,应注意防破坏,并与周边环境相协调。 3) 在强电磁干扰环境下,监控摄像头安装应与地绝缘隔离。 4) 信号线和电源线应分别引入,外露部分用软管保护,并不影响云台的转动。 5) 电梯厢内的监控摄像头应安装在厢门上方的左或右侧,并能有效监视电梯厢内乘员面部特征。 云台、解码器安装: 1) 云台的安装应牢固,转动时无晃动。 2) 应根据产品技术条件和系统设计要求,检查云台的转动角度范围是否满足要求。 3) 解码器应安装在云台附近或吊顶内(但须留有检修孔)。 监控摄像头控制设备安装: 1) 控制台、机柜(架)安装位置应符合设计要求,安装应平稳牢固、便于操作维护。机柜架)背面、侧面离墙净距离应符合维修要求。 2)监控摄像头所有控制、显示、记录等终端设备的安装应平稳,便于操作。其中监视器(屏幕)应避免外来光直射,当不可避免时,应采取避

光措施。在控制台、机柜(架)内安装的设备应有通风散热措施,内部接插件与设备连接应牢*。 3) 控制室内所有线缆应根据设备安装位置设置电缆槽和进线孔,排列、捆扎整齐,编号,并有永久性标志。 监控工程施工常见问题 安防工程的专业施工及安装标准根据国家有关部门近年来颁发的安防设计、施工规范、规程和标准,在总结我公司几年来安防工程的设计和施工经验和基础上,结合安防科技发展的新技术、新产品的技术要求,本着服务社会、用户第一的宗旨,一、室内配线的技术室 安防工程的专业施工及安装标准 根据国家有关部门近年来颁发的安防设计、施工规范、规程和标准,在总结我公司几年来安防工程的设计和施工经验和基础上,结合安防科技发展的新技术、新产品的技术要求,本着服务社会、用户第一的宗旨, 一、室内配线的技术 室内配线不仅要求安全可*,而且要使线路布置合理、整齐,安装牢固。技术要求如下: 使用导线,其额定电压应大于线路的工作电压;导线的绝缘应符合线路的安装方式和敷设的环境条件。导线的截面积应能满足供电和机械强度的要求。 配线时应尽量避免导线有接头。除非用接头不可的,其接头必须采用压线或焊接。导线连接和分支处不应受机械力的作用。

S3C6410 移植Android 内核移植经验

主要过程: . 安装lunux 环境 . 安装编译工具 . 下载Linux kernel . 安装Android SDK . 获得root file system . 修改Linux kernel 源码 . 配置Linux kernel . 修改root file system . 编译Linux kernel . 下载kernel Image 1.安装linux 环境 安装Ubuntu Linux 系统,从网站上下载操作系统安装光盘映像,地址: https://www.wendangku.net/doc/f716682087.html,/ubuntu/releases/8.04/ 下载ubuntu-8.04.2-desktop-i386.iso,刻录成光盘安装,安装可以在windows 系统下进行, 选取有15G 空间的硬盘安装,输入用户密码开始安装 这一步结束退出光盘重启进入Ubuntu 系统,完成余下系统安装。 Linux 安装完成,进入Ubuntu 系统,确保电脑连接Internet,安装一些必要软件。 打开终端输入命令框,进行下面的操作: $ sudo apt-get install ssh $ sudo apt-get install flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl

$ sudo apt-get install valgrind $ sudo apt-get install sun-java6-jdk $ sudo apt-get install libncurses5-dev 所有软件系统会自动从网络下载安装,完成后可以开始Android 的移植。 2.安装编译工具 下载: $ wget https://www.wendangku.net/doc/f716682087.html,/public/gnu_toolchain/arm-none-linux-gnuea bi/arm-2008q1-126-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 安装: $ tar -xjvf arm-2008q1-126-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 3.下载Linux kernel 从下面地址获得: https://www.wendangku.net/doc/f716682087.html,/p/android/downloads/list?can=1&q=&colspec=File name Summary Uploaded Size DownloadCount Kernel : linux-2.6.23-android-m5-rc14.tar.gz 解压文件 $ tar -xf linux-2.6.23-android-m5-rc14.tar.gz 4.安装Android SDK 从网上下载linux 版本的Android SDK,如下 https://www.wendangku.net/doc/f716682087.html,/android/android-sdk_m5-rc15_linux-x86.zip 下载后解压,获得android-sdk_m5-rc15_linux-x86 文件 5.获得root file system ⑴下载busybox 工具从下面地址 http://benno.id.au/blog/2007/11/14/android-busybox(linux 环境中下载)⑵运行emulator 获取root file system $ cd <目录>/ android-sdk_m5-rc15_linux-x86/tools $ ./emulator& 等待emulator 启动,看到出现Android 系统画面,进入菜单ALL/Dev Tools/Development Settings 下,将Wait for debugger,Show running processes,Show screen updates 这三项打勾,回到命令输入终端。 $ ./adb push /busybox /data $ ./adb shell # /data/busybox tar -czf system.tar.gz /system # /data/busybox tar -czf data.tar.gz /data # /data/busybox tar -czf etc.tar.gz /etc # /data/busybox tar -czf sbin.tar.gz /sbin # exit $ ./adb pull /system.tar.gz ./ $ ./adb pull /data.tar.gz ./

【IT专家】yolo模型移植到android手机端

本文由我司收集整编,推荐下载,如有疑问,请与我司联系 yolo模型移植到android手机端 2017/08/18 665 之前写了android demo在手机上的运用,但是模型都是官方给的,想要替换成自己的模型,因此尝试了下将自己训练的yolo模型来替换demo给的模型。首先,darknet的训练和.weight文件到.pb文件的转化,以及android demo 的实现见之前的博客。在此不再叙述sdk,nkd等配置问题,且直接使用.pb文件。其次,默认已安装android studio。 (1)终端进入(android安装目录)/bin,输入./stuodio.sh开启android studio ?(2)点击new,import project导入(tensorflow所在路径)/tensorflow/examples/android文件夹(可连接手机先run,保证demo能够正常运行后再行修改) ?(3)将build.gradle中68行的bazelLocation改为自己bazel的路径:def bazelLocation = ‘/home/seven/bin/bazel’185行apply from: “download-models.gradle”注释掉,并在第112行,增加//*/(不然后面的内容都被当做注释了): ?if (nativeBuildSystem == ‘bazel’ || nativeBuildSystem == ‘makefile’) { // TensorFlow Java API sources. java { srcDir ‘../../java/src/main/java’ exclude ‘**/examples/**’//*/ } // Android TensorFlow wrappers, etc. java { 最后,将第76行开始的内容改为自己需要的版本号: android { compileSdkVersion 25 buildToolsVersion “26.0.1” if (nativeBuildSystem == ‘cmake’) { defaultConfig { applicationId = ‘org.tensorflow.demo’ minSdkVersion 21 targetSdkVersion 25 ndk { abiFilters “${cpuType}” } (4)将转化得到的.pb文件放在(tensorflow所在路径)/tensorflow/examples/android/assets文件夹内,为方便起见,可将此.pb重命名为graph-tiny-yolo-voc.pb。若文件夹中已存在此文件名的文件,删除之。 ?(5)该项目将一次性生成三个app,因为我只需要detect一个,在AndroidManifest.xml中删除关于另外的两个activity,修改后的文件如图 ?

摄像头是如何做出来的

看——摄像头是如何做出来的! 市场上一般主流的摄像头都在一百多元左右,基本上都归成外设耗材类产品。很多人去买摄像头的时候,都以为没有什么技术含量,没有什么工艺要求,买个鼠标键盘还要看看手感,买摄像头就不太在意了,所以造成很多生产摄像头的厂商大量制造品质低劣的产品,有无牌无厂的,有大品牌去找小厂OEM的,鱼龙混杂,这些摄像头“厂家”基本上有三个类型: 一、纯加工厂,这类厂家无开发能力,到市场上买一些外壳(俗称:模具),买已经设计好的公版PCB,就进行手工贴片和组装。专门接单,赚的是加工费,有时也随便贴个牌子,以低价或抛单的形式来渠道上出现。 二、品牌运营商和兼营商,这类商家具有很强的渠道推广的能力,品牌也有较好的知名度,摄像头产品主要是从纯加工厂里买来,也叫OEM。虽然有品牌,但外观长得都差不多一个样,产品同质化严重。 三、综合化厂家,拥有有从外观设计、电路开发、软件和驱动研发、生产、销售的综合企业,这类厂家在最所投入的精力最大,产品也较具特色,能较好的把握市场和消费者的需求,不断开发新的产品推向市场。 笔者近来就去一家综合化的摄像头开发生产厂家全程参观了J-CAM的全套生产过程。从外观设计,PCB电路板设计、精密模具设计制造、注塑成形、无尘车间喷油、电路板SMT高速贴片、插件、装配、检测、包装。

(接下来,介绍的就是此款摄像头的制造流程) 出色的摄像头不仅需要有出色的效果,同样,也要有吸引人的外观。成功的外观设计,需要出色的设计理念,但要把将这理念在具体实物体现出来,又需要精湛的工艺。 设计篇 一、外观设计 据天敏工业设计小组介绍,摄像头前期设计的工作也很复杂。 一个新的摄像头的诞生,最初由设计师的灵感而成,设计师首先用手画草图,将自己的的想法粗略地在纸上体现,画出简易的大体外观。 (天敏子弹头的设计草图) 在ID小组讨论后决定后,用Rhino犀牛工业造型软件先画几个三维的外观效果图,经讨论大致确认后,把这个粗略的外观图纸文件送去打版中心进行CNC三维雕刻打“手版”,然后对实体模型进行评审,然后会根据模型计师进行不断的修改,这个过程是要将摄像头的最后所要实现的外观确认。外观打样后,即进行结构论证和设计工作,一般使用“PRO-E”软件,结构设计。 在设计底座时,就打了很多个样版。设计师根据市场的调研,发现现大多数的摄像头的底座都

Android_ROM制作移植及精简教程

Android_ROM制作,精简及移植教程 本教程主要内容有:Android系统文件夹结构解析、应用软件说明、定制精简、ROM签名把包等内容。刷机有风险,出问题自负。其实这个教程一早就想写的,但由于时间及本人的懒惰,一直拖着。今晚终于静下心来写好本文,本文有部份内容来自于网络。 速度与华丽,你喜欢那个。是不是想要一个又够速度又华丽的ROM呢?我是一个追求新鲜的人,对于手机的ROM,我又追求稳定、精简、美观、省电。现在Hero ROM有很多,最新的有第三方Android 2.1版本,但这些ROM的制作者都会跟据自已的个人喜欢会增加和增少相应的功能或是界面,但我们往往不喜欢这些ROM的某些小方面,所以随着而来面对的问题就是怎样把这个ROM修改成为一个自已真正需要的ROM呢?以往一直是依靠“大杀器”来解决,但觉得还是过于麻烦,所以寻求办法自己动手修改ROM。于是有了本文。废话少说,进入题。 一、Android系统文件夹结构 一个完整的ROM根目录会有以下几个文件夹及文件: data META-IN system boot.img 系统目录说明 1. 应用程序安装目录 1) 系统应用程序所在目录 /system/app/*.apk 2)用户安装应用程序所在目录 /data/app/*.apk 3) 注意: a)在模拟器中,每重启一次,/system/app/下的应用都会被还原,有时/data/app下也会被清除 b)若在/system/app和/data/app下有重名的应用,不一定会启动哪一个,尤其是在adb install杀死正在运行的程序时,有时旧的就会被启动 2.用户数据所在目录 /data/data/应用包名/shared_prefs 配置文件 /data/data/应用包名/databases/* 库文件所在目录 3. SD卡对应目录 /sdcard/

手机摄像头模组生产工艺的SMT流程及SMT应用分析(1).

手机摄像头模组生产工艺的SMT流程及SMT应用分析 摘要 随着通信技术的不断扩延,手机已成为人们生活、工作、学习、娱乐不可或缺的工具。而手机摄像头模组是手机中非常重要的组件之一,其品质的好坏直接影响手机整体品质的高低。因此在手机摄像头模组生产的过程中每一步都是要严格把关的,不能有丝毫的懈怠。在手机摄像头模组中,FPC软电路板是决定手机照相生成图片的关键组件之一,因此它的生产工艺及质量好坏显得尤为重要。 基于此,首先简单介绍了手机摄像头模组原理以及SMT技术在手机摄像头模组生产工艺中的应用,着重阐述了手机摄像头模组FPC软电路板的改良设计和SMT生产工艺流程及产品质量分析。根据手机摄像头模组FPC软电路板的具体要求,合理进行SMT技术指标优化,分析研究了手机摄像头模组再流焊SMT焊接温度分布曲线。针对FPC软电路板产品设置了AIO(automatic optical inspection)检测及ICT在线测试方法。 关键字:手机摄像头模组 SMT AIO检测 ICT在线测试

Mobile phone camera module production technology of SMT processes and SMT application ABSTRACT Summary as communication technologies continues expansion, mobile phone has become the people's life, work, learn, play an indispensable tool. Mobile phone camera module is one of the very important components in the mobile phone, its quality directly affect the overall level of quality phones. In the mobile phone camera module production at every step in the process is to strictly, there can be no slack. Mobile phone camera module in the FPC flexible circuit board is to determine the key components of the camera phone picture, therefore its production process and the quality is particularly important. Based on this, the first simply introduced the mobile phone camera module principle and SMT technology and its application in mobile phone camera module production, focusing on mobile phone camera module is described FPC flexible circuit board design and analysis of SMT production process and product quality. According to mobile phone camera module FPC flexible circuit board requirements, reasonable SMT technical specifications, analysis of mobile phone camera module for reflow SMT soldering temperature distribution curves.FPC flexible circuit board set AIO products (automatic optical inspection) test online test methods and ICT. Keyword: mobile phone camera module;SMT;AIO ICT;on-line test

usb摄像头驱动移植第一步总结

Kernel version :2.6.22.6 Crosstool :arm-softfloat-linux-gnu-gcc-3.4.5 Board :FS2410 System :ubuntu 8.10 Source :spcaview-20061208.tar.gz SDL-1.2.13.rar servfox-R1_1_3.rar gspcav1-20071224.tar.gz 整理:LXP 一、移植gspcav1-20071224 FS2410开发板上移植的是Linux-2.6.22.6内核,USB及CS8900A均能工作,由于linux-2.6.22.6/drivers/usb 目录下没有media 目录,故移植步骤如下: [linux@farsight usb]$ pwd /work/kernel/linux-2.6.22.6/drivers/usb [linux@farsight usb]$ vi Kconfig 添加 source "drivers/usb/media/Kconfig" [linux@weijing usb]$ vi Makefile 添加 obj-$(CONFIG_USB_SPCA5XX) += media/ [linux@weijing media]$ pwd /work/kernel/linux-2.6.22.6/drivers/usb/media [linux@weijing media]$ vi Kconfig # # USB Multimedia device configuration # comment "USB Multimedia devices" depends on USB config USB_SPCA5XX tristate "USB SPCA5XX Sunplus/Vimicro/Sonix jpeg Cameras" depends on USB && VIDEO_DEV [linux@weijing media]$ vi Makefile # # Makefile for USB Media drivers #

安卓系统移植经验之谈,教你三分钟移植

每当我闲下来时不发Rom时,就会整理一下思路,发发教程啥的,我觉得能带动机油们自己打造、改造Rom,共同提升,才是Romer的追求。 发Rom也好,教程也好,我的宗旨是不设回复可见,如果你觉得好,回复或者评分鼓励一下,我就很开心了。 不过这样做的一个遗憾就是,我的帖子通常回复率不够高,沉得快。 好了,闲话少说,上教程。 注:可能你会觉得文字教程比较干枯,不够形象生动,但是请精心看,我会尽量讲得具体、清晰。 首先,我并不算是移植高手,这个教程只是我在自己移植过程中的的一些收获体会,一些经验之谈。 如果你觉得有什么不对或值得改进的地方,欢迎和我交流,我们一起来完善这个教程。 因为移植所涉及的机型、配置相当多变和复杂,所以我无法讲具体细节,只能讲大致的原则。 可以结合我移植U8800+的JoyOS到U8860的例子作为参考进行理解。 我把这些原则抽象出来,命名为Rom移植5步法,具有一定的通用性。 Rom移植的方向有正向和逆向之分: 正向的做法通常就是,找个目标机型的底包,然后把要移植的包的app和framework提取出来替换进去。 这样的优点是改动无需太大,非常快捷;缺点是经常因为一些bin下的程序或者

库文件的差异而导致成功率不够高。 逆向的做法是,拿要移植的包作为底包,把目标机型的内核、wifi驱动、传感器库文件、配置文件等替换进去。 这样做要复杂一些,需要准确两个包的差异,知道应该改哪里; 优点自然是不成则已,一旦移植成功能最大限度地发挥Rom性能,因为框架、程序与底层的契合度要比正向法好。 我这个教程以逆向法为例。 另外,Rom移植有风险,刷机测试需谨慎,如有本人操作不当导致出现任何问题,本人概不负责。 Rom移植5步法: 1.Rom移植涉及的东西比较偏底层,所以在移植之前必须清楚目标机型的硬件配置,分区结构。 这里的配置不是说主频多少、内存多少,这两个参数基本上不会影响移植的进行。对于移植,最关键的因素是主板平台,通常采用同一系列的cpu的不同机型的Rom移植的成功率要高很多。 比如,U8800+和U8860均是高通8255处理器,虽然主频不一样,但它们却同属于同样的MSM7x30平台。 他们之间的互相移植,绝对要比与MSM7K平台的中兴V880互相移植来的容易得多。 至于为什么要弄清分区结构,会在下面讲到。

usb摄像头驱动的移植并在网页上查看视频信息

【usb摄像头驱动的移植】 常见的usb摄像头有两种格式:YUV,GSPCA 格式 YUV格式:不经压缩的视频GSPCA格式:视频经过了压缩 1.如果摄像头是YUV格式: 通用的移植步骤是: make menuconfig Device Drivers ---> <*> Multimedia support ---> [*] Cameras/video grabbers support [*] Media USB Adapters ---> < *> USB Video Class (UVC) (NEW) 2.视频通过一张一张图片连续播放得到视频信息,每秒播放24帧图像会得到视频信息 3.添加摄像头驱动(GSPCA) 1.将摄像头插入到pc电脑,让pc电脑去识别摄像头。 将得到的详细的硬件信息是: V(vendor)ID: 0AC8 PID:303B 2.在内核的源码中搜索VID或者PID. grep "303b" * ./* -nR 搜索结果:drivers/media/usb/gspca/zc3xx.c:6986: {USB_DEVICE(0x0ac8, 0x303b)}, 425 config USB_GSPCA_ZC3XX 426 tristate "ZC3XX USB Camera Driver" 427 depends on VIDEO_V4L2 && USB_GSPCA 说明要添加USB_GSPCA_ZC3XX VIDEO_V4L2 USB_GSPCA 3.在菜单中用/ 搜索USB_GSPCA 搜索结果:Symbol: USB_GSPCA [=n] │ │Type : tristate │Prompt: GSPCA based webcams │Location: │-> Device Drivers │(1) -> Multimedia support (MEDIA_SUPPORT [=n]) │-> Media USB Adapters (MEDIA_USB_SUPPORT [=n]) │Defined at drivers/media/usb/gspca/Kconfig:1 │Depends on: USB [=y] && MEDIA_SUPPORT [=n] && MEDIA_USB_SUPPORT [=n] 4.根据搜索结果找到对应的驱动在菜单中选中添加: make menuconfig -> Device Drivers │

ANDROID Platform GT818 驱动移植说明书

Android平台GT818驱动移植说明书 【程序总揽】 本程序针对Android2.1系统,移植的硬件平台为华天正科技开发的Real6410(基于S3C6410)。本驱动支持多指,能够在系统支持的情况下在主控进入关屏状态时自动调整GT818工作状态,达到省电的目的。 1.1系统资源使用 1.2系统运行流程 为了便于移植,程序中采用了中断和定时查询两种方式,并建议使用中断方式。以中断方式为例,系统的主运行流程如下所示: 1.创建Guitar对应的i2c_client对象,其中完成了该适配器的相关信息设置; 2.加载触摸屏驱动,注意该驱动必须在I2C总线驱动已经加载的情况下才能进行,否则I2C通信将 出错。程序中将其加载优先级设为最低; 3.创建驱动结构体,探测Guitar设备,并将其挂载到I2C总线驱动上;测试I2C通信,注册input 设备,申请IO口和中断资源,完成Guitar初始化工作(如有需要,烧录升级在此进行); 4.开启触摸屏中断,等待数据接收; 5.收到触摸屏数据中断,关中断; 6.通过I2C传输数据,分析手指信息,; 7.更新按键信息,上报手指坐标、按键等信息,开中断; 8.重复4-7之间的循环。

【移植指南】 4.准备工作 本驱动采用GPL许可证,代码没有采用模块方式,所以使用本驱动前需要重新编译内核。在编译内核前,

我们需要做好以下准备工作: 1、在硬盘上或使用虚拟机(如VmWare)安装Linux系统,推荐使用Ubuntu9.10; 2、安装gcc及arm-linux-gcc和其他编译工具,将CC和LD指定为arm-linux-gcc; 3、获取平台对应的Android源码,解压到自己的工作目录。 4、了解移植平台的IO口、中断、I2C总线的使用方式。 5.内核编译配置 在编译代码前我们需要进行内核编译配置,可以使用下面命令中的一个: #make xconfig (基于QT的图形配置界面,非常直观,推荐使用) #make menuconfig (基于文本菜单的配置界面) 下面我们以make xconfig为例,将我们的驱动增加到内核中去。假定我们源代码目录为: ~/android/kernel/ 将编写的源代码复制到Linux内核源代码的相应目录: ~/android/kernel/driver/input/touchscreen/goodix_touch.c ~/android/kernel/include/linux/goodix_touch.h ~/android/kernel/include/linux/goodix_update.h //如果不做烧录则可以不加 1.在目录touchscreen的Kconfig文件中增加新源代码对应项目的编译配置选项: #----------------------------------------------------------------- config TOUCHSCREEN_GOODIX_GT818 # 配置项名称 tristate "S3C6410 TouchScreen Driver" #选择项,选择Y标识要将其编译进内核 default y #默认编译选项 depends on I2C #依赖项,本驱动必须工作在I2C总线驱动的基础上 help #帮助信息 It is a android driver to support Gooidx's touchscreen whose name is guitar on s3c6410 platform. The touchscreen can support multi-touch not more than two fingers. Say Y here to enable the driver for the touchscreen on the S3C SMDK board. If unsure, say N.To compile this driver as a module, choose M here: the module will be called goodix_touch.ko. #----------------------------------------------------------------- 注意: 当将编译选项设置为M时,编译生成的驱动需要我们手动挂载。如需要系统启动时自动挂载,需要将模块goodix_touch.ko拷贝到系统模块加载目录,并修改对应的启动过程的rc脚本。 2.在目录touchscreen的makefile文件中增加对新源代码的编译条目; #这里的二进制文件名必须与源文件名移植,如goodix_touch

摄像头生产全过程

制造流程-设计篇 外观设计: 据天敏工业设计小组介绍,摄像头前期设计的工作也很复杂。 一个新的摄像头的诞生,最初由设计师的灵感而成,设计师首先用手画草图,将自己的的想法粗略地在纸上体现,画出简易的大体外观。 (天敏子弹头的设计草图) 在 ID 小组讨论后决定后,用 Rhino 犀牛工业造型软件先画几个三维的外观效果图,经讨论大致确认后,把这个粗略的外观图纸文件送去打版中心进行 CNC 三维雕刻打“手版”,然后对实体模型进行评审,然后会根据模型计师进行不断的修改,这个过程是要将摄像头的最后所要实现的外观确认。外观打样后,即进行结构论证和设计工作,一般使用“ PRO-E ”软件,结构设计。 在设计底座时,就打了很多个样版。设计师根据市场的调研,发现现大多数的摄像头的底座都是“夹子”,这种夹子在夹笔记本就还可以,但在设计很个性的液晶显示器上很多是夹不着的,有太厚的原因,背板是不规则。设计师专门设计了一个万能的“挂座”,这是一个根据力学原理来设计的底座,不用夹子也可以很轻松的挂在笔记本和液晶显示器上,同样也可以放在桌面或 CRT 显示器上。这个“挂座”很费精力,材料、模具应如何设计、出模方式等,都跟模具设计师做了大量的讨论构通,也打了很多的样版来做试验。在结构设计阶段,需要丰富的模具知识,跟模具设计师的大量沟通

(天敏子弹头三维外观效果图) 具体的内部尺寸确定,那时设计师就可以将 PCB 板的尺寸给硬件工程师,在设计同时, PCB 的设计从现在开始也在同步地进行,相互之间也要做大量的沟通,有时为了争一点点空间,相互争个面红耳斥。 为了检查结构尺寸和 PCB 板的配合,还要做结构手板,经过检测,如果外观有问题或者内部结构与 PCB 板不合,再进行修改。修改外观其实是一个反复的过程,直到所有的设计达到最好的配合,最终确定模具,才正式开始交 PRO-E 图纸给专业的模具厂制造模具。从外观到结构,这个设计的时间最长,不确定的因素也很多,通常要两三个月,之后就快起来了。 外观设计的工序: ?灵感:手绘草图确认大体外观 ?实践:软件 pro-e 或犀牛等画出大致外观 ?初期颜色确定:用 3D MAX 进行渲染 ?用 pro-e 做出内部的结构,实现外观所需要的 ?做手版,目的:确认外观、检查结构与 PCB 配合 ?修改结构图 ?制造模具(大约 30 天)

任意安卓移植ROM教程,超详细ROM技术学习

任意安卓移植ROM教程,超详细ROM技术学习 相信有过刷机经历的都知道安卓系统的构造,我们讲述一下安卓的几大组成:从内核基于linux开始,整个系统就运行在一个虚拟机上,这是安卓的一大特征!! 那么我们移植的时候要修改哪一部分?这就是我们这个帖子的重点了。在刷机时,我们大多使用zip格式的升级包进行刷机,那zip格式的升级包是怎么样的一个组成呢?一个zip升级包的完整构造,其中我们要移植所需要修改的就是META-INF里的刷机脚本。 对于这个构造,有必要完整的解释一次。 META-INF 这里面主要是签名文名和刷机时执行的脚本(updater-script),移植时,我们主要要更改的就是刷机的脚本。system 这里面就是android的系统部分app 这里存放的是系统的app,每个app都有两个文件,一个*.apk,一个*.odex,我们在移植时,要将这个文件合并到对应的*.apk里面去,apk文件其实就是一个zip文件,可以用WinRAR或7zip打开的,当然,合并odex文件不是把它改名直接放到apk里去这么简单的,后面具体介绍一下。还有,这个文件夹里面的程序,刷完以后是不能通过程序管理来卸载的。bin 这里面存放的是native程序,不好意思,一下子忘掉中文怎么说了。简单来说,apk是JAVA 程序,而这个是C/C++的程序。etc 这里面存放的是系统默认的配置文件,GPS的配置也在这里J。fonts 这个是字体文件夹,一般很少改动,除非要做美化framework 这里存放的是android框架,移植MIUI,很多改动在这个文件夹里,美化ROM的话,主要改framework-res.apk就可以了。当然,MIUI本身就有主题机制了,不用这么麻烦去改。这个文件夹里也会有对应的odex文件。lib 一些通过的类库,一般是由app/bin里面的程序调用的。media 媒体文件,要添加系统默认的铃声就在这里了。如果是别的ROM的话,壁纸也会放在这里面。

相关文档
相关文档 最新文档