S3C6410 ARM11开发板Linux BSP构建

Similar documents
Linux内核的移植技术剖析

[公司名称]

Linux网络设备驱动

DVK530/531扩展板

[公司名称]

DVK530/531扩展板

华清远见嵌入式培训课件

Microsoft Word - 正文.doc

华恒家庭网关方案

Ch03_嵌入式作業系統建置_01

Microsoft Word - 实用案例.doc

ESP-Jumpstart

嵌入式Linux块设备驱动开发解析

Measurement Studio Expands Your Test and Measurement Programming Power

网名 鱼树 的学员聂龙浩, 学习 韦东山 Linux 视频第 2 期 时所写的笔记很详细, 供大家参考 也许有错漏, 请自行分辨 目录 驱动框架分析 内核中的理解 : 内核这样理解 :... 2 RTC 测试 RTC:

CC213

C/C++ - 文件IO

考 試 日 期 :2016/04/24 教 室 名 稱 :602 電 腦 教 室 考 試 時 間 :09: 二 技 企 管 一 胡 宗 兒 中 文 輸 入 四 技 企 四 甲 林 姿 瑄 中 文 輸 入 二 技 企 管 一

嵌入式工程师考纲大纲(中级)

第 十 一 期 2015 年 2 月 关 于 车 辆 购 置 税 征 收 管 理 有 关 问 题 的 公 告 ( 点 击 跳 转 至 全 文 ) 国 家 税 务 总 局 公 告 2015 年 第 4 号 关 于 电 池 涂 料 消 费 税 征 收 管 理 有 关 问 题 的 公 告 ( 点 击 跳

2013年度西藏自治区教育厅

實用文格式大全.doc

薛 秦 高 继 宁 宋 明 锁 文 洪 梁 瑞 敏 贾 跃 进 内 蒙 古 自 治 区 (3 人 ) 琪 格 其 图 米 子 良 赵 震 生 辽 宁 省 (8 人 ) 田 素 琴 白 凤 鸣 肖 瑞 崇 黄 恩 申 白 长 川 杨 世 勇 李 敬 林 王 秀 云 吉 林 省 (5 人 ) 赵 继 福

个 小 小 的 乡 下 人 木 匠 的 儿 子, 竟 然 有 这 么 大 的 力 量 其 实 就 是 这 点, 祂 活 出 来 的 那 种 爱, 是 世 界 上 没 有 的 祂 活 出 来 的 爱 是 世 界 上 的 人 都 需 要 的, 但 却 是 人 人 在 这 个 世 界 上 都 得 不 到

<4D F736F F D20C7B6C8EBCABDCAB5D1E9CAD2B7BDB0B82E646F63>

概述

Windows RTEMS 1 Danilliu MMI TCP/IP QEMU i386 QEMU ARM POWERPC i386 IPC PC104 uc/os-ii uc/os MMI TCP/IP i386 PORT Linux ecos Linux ecos ecos eco

,,, PCB, AR M VxWorks DSP,,,,,,,,,,, (CIP) /,,.:,2005 ISBN TP36 CIP (2005) : ( 10 ) : : (010 ) : (010)

3 PCI PCI PCI type 0 PCI type 1 PCI type 2 PCI CardBus PCI 16 6 Device ID Vendor ID 00h Status Register Command Register 04h Class Code Revision ID 08

C 1

目 录 第 一 部 分 档 案 局 概 况 一 主 要 职 责 二 部 门 决 算 单 位 构 成 第 二 部 分 档 案 局 2016 年 度 部 门 预 算 表 一 2016 年 度 市 级 部 门 收 支 预 算 总 表 二 2016 年 度 市 级 部 门 支 出 预 算 表 三 2016

2015 年 度 收 入 支 出 决 算 总 表 单 位 名 称 : 北 京 市 朝 阳 区 卫 生 局 单 位 : 万 元 收 入 支 出 项 目 决 算 数 项 目 ( 按 功 能 分 类 ) 决 算 数 一 财 政 拨 款 一 一 般 公 共 服 务 支 出 二

1 CPU interrupt INT trap CPU exception

EK-STM32F

static struct file_operations gpio_ctl_fops={ ioctl: gpio_ctl_ioctl, open : gpio_open, release: gpio_release, ; #defineled1_on() (GPBDAT &= ~0x1) #def

int *p int a 0x00C7 0x00C7 0x00C int I[2], *pi = &I[0]; pi++; char C[2], *pc = &C[0]; pc++; float F[2], *pf = &F[0]; pf++;

51 C 51 isp 10 C PCB C C C C KEIL

Microsoft Word - Index.doc

C PICC C++ C++ C C #include<pic.h> C static volatile unsigned char 0x01; static volatile unsigned char 0x02; static volatile unsigned cha

98年度即測即評學科測試與即測即評即發證技術士技能檢定簡章

Microsoft Word 箕æ−¥ï¼‹å®ı稿;

C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1

c_cpp

FY.DOC

穨2700使用手冊.doc

(Load Project) (Save Project) (OffLine Mode) (Help) Intel Hex Motor

2013 C 1 # include <stdio.h> 2 int main ( void ) 3 { 4 int cases, a, b, i; 5 scanf ("%d", & cases ); 6 for (i = 0;i < cases ;i ++) 7 { 8 scanf ("%d %d

KL DSC DEMO 使用说明

untitled

<4D F736F F D20C7B6C8EBCABDCFB5CDB3C9E8BCC6CAA6BFBCCAD4B4F3B8D92E646F63>

南京市人才服务中心

1

Microsoft Word - S3c6410移植过程.doc

6020

P4i45GL_GV-R50-CN.p65

Microsoft Word - 第3章.doc

专业主干课程与主要专业课程教学大纲(2009年、2011年).doc

第一章 概论

<4D F736F F F696E74202D20D7A8CCE2D2BBA3BAC7B6C8EBCABDBFAAB7A2D6AEB4A5C3FEC6C1C7FDB6AFBFAAB7A2202D20D2D7C0CFCAA62E BBCE6C

untitled

Serial ATA ( Nvidia nforce430)...2 (1) SATA... 2 (2) B I O S S A T A... 3 (3) RAID BIOS RAID... 6 (4) S A T A... 9 (5) S A T A (6) Microsoft Win

目录

PROTEUS VSM

新版 明解C++入門編

1. 软 件 核 武 器 CTreeNode 基 本 原 理 以 下 详 细 介 绍 这 一 技 术 的 基 本 原 理 -CTreeNode 这 是 一 种 数 据 结 构, 类 似 于 CObject 存 在 于 内 存 中 1. 能 够 以 树 形 的 方 式 嵌 套 存 贮 非 常 复 杂

C C C The Most Beautiful Language and Most Dangerous Language in the Programming World! C 2 C C C 4 C Project 30 C Project 3 60 Project 40

BOOL EnumWindows(WNDENUMPROC lparam); lpenumfunc, LPARAM (Native Interface) PowerBuilder PowerBuilder PBNI 2

提问袁小兵:

6 C51 ANSI C Turbo C C51 Turbo C C51 C51 C51 C51 C51 C51 C51 C51 C C C51 C51 ANSI C MCS-51 C51 ANSI C C C51 bit Byte bit sbit

untitled

C/C++ - 函数

ARM JTAG实时仿真器安装使用指南

untitled

PIC_SERVER (11) SMTP ( ) ( ) PIC_SERVER (10) SMTP PIC_SERVER (event driven) PIC_SERVER SMTP 1. E-

Copyright 2007 Hewlett-Packard Development Company, L.P. Microsoft 和 Windows 是 Microsoft Corporation 在 美 国 的 注 册 商 标 Bluetooth 是 其 所 有 者 拥 有 的 商 标,Hew

untitled

新・解きながら学ぶC言語

PCMCIA Compact Flash GPRS GPS PCMCIA Personal Computer Memory Card International Association CF Compact Flash PCMCIA CF PCMCIA/CF

ATMEL AT90S8515 AVR CPU AVR AVR AVR ATMEL RISC 32 8 r0 r X Y Z R0 R1 R2 R13 R14 R15 R16 R17 R26 R27 R28 R29 R30 R31 0x00 0x

USB解决方案.ppt

概述

1 Project New Project 1 2 Windows 1 3 N C test Windows uv2 KEIL uvision2 1 2 New Project Ateml AT89C AT89C51 3 KEIL Demo C C File

C语言的应用.PDF

ICD ICD ICD ICD ICD

untitled

untitled

Abstract arm linux tool-chain root NET-Start! 2

2 12

ebook50-15

2005 3

附件3

<4D F736F F D20C7B6C8EBCABDCFB5CDB3C9E8BCC6CAA6B0B8C0FDB5BCD1A75FD1F9D5C22E646F63>

<4D F736F F D20C8EDC9E82DCFC2CEE7CCE22D3039C9CF>

新・明解C言語入門編『索引』

ARM学习报告003——Bios源码分析.doc

untitled

发展党员材料填写参考(上网).doc

KillTest 质量更高 服务更好 学习资料 半年免费更新服务

SPHE8202R Design Guide Important Notice SUNPLUS TECHNOLOGY CO. reserves the right to change this documentation without prior notice. Information provi

ARM+Linux嵌入式系统开发路线

Transcription:

嵌入式培训专家 S3C6410 ARM11 开发板 Linux BSP 构建 主讲 : 宋宝华 www.farsight.com.cn

今天的内容 vbsp 的组成部分 vplat/mach 各组件的实现 内核节拍 中断管理 时钟 GPIO DMA IO 内存映射 v 设备与资源 platform device resource 和 plarform data uart/spi/i2c 等设备板级 resource

vbsp 作用 为内核的运行提供底层支撑 屏蔽与板相关的硬件细节 BSP 的组成部分 v 基本组成 时钟 tick(hz) 的产生 系统中断控制的方法 GPIO DMA 时钟资源的统一管理 静态映射的 IO 内存 设备的 IO 中断 DMA 等资源封装平台数据

vplat-xxx linux-2.6/arch/arm/ plat-omap/ plat-pxa/ plat-s3c/ plat-s3c24xx/ plat-s3c64xx/ plat-stmp3xxx/ vmach-xxx linux-2.6/arch/arm/ mach-s3c2400/ mach-s3c2410/ mach-s3c2412/ mach-s3c2440/ mach-s3c2442/ mach-s3c2443/ mach-s3c24a0/ mach-s3c6400/ mach-s3c6410/ ARM BSP 的目录

vsys_timer 和 timer_tick static irqreturn_t s3c2410_timer_interrupt(int irq, void *dev_id) { timer_tick(); return IRQ_HANDLED; } static struct irqaction s3c2410_timer_irq = { };.name.flags.handler 时钟节拍的产生 = "S3C2410 Timer Tick", = IRQF_DISABLED IRQF_TIMER IRQF_IRQPOLL, = s3c2410_timer_interrupt, static void init s3c2410_timer_init(void) { } s3c2410_timer_resources(); s3c2410_timer_setup(); setup_irq(irq_timer4, &s3c2410_timer_irq); struct sys_timer s3c24xx_timer = { };.init.offset.resume = s3c2410_timer_init, = s3c2410_gettimeoffset, = s3c2410_timer_setup

v irq_chip static struct irq_chip s3c_irq_uart = {.name = "s3c-uart",.mask = s3c_irq_uart_mask,.unmask = s3c_irq_uart_unmask,.mask_ack = s3c_irq_uart_maskack,.ack = s3c_irq_uart_ack, }; static void init s3c64xx_uart_irq(struct uart_irq *uirq) { for (offs = 0; offs < 3; offs++) { irq = uirq->base_irq + offs; set_irq_chip(irq, &s3c_irq_uart); set_irq_chip_data(irq, uirq); set_irq_handler(irq, handle_level_irq); set_irq_flags(irq, IRQF_VALID); } set_irq_chained_handler(uirq->parent_irq, s3c_irq_demux_uart); } void init s3c64xx_init_irq(u32 vic0_valid, u32 vic1_valid) { set_irq_chip(irq, &s3c_irq_timer);... for (uart = 0; uart < ARRAY_SIZE(uart_irqs); uart++) s3c64xx_uart_irq(&uart_irqs[uart]); } 系统中断管理

GPIO 管理 vgpio_chip 和统一的 gpio_xxx API struct gpio_chip { int void int int int void (*request)(struct gpio_chip *chip, unsigned offset); (*free)(struct gpio_chip *chip, unsigned offset); (*direction_input)(struct gpio_chip *chip, unsigned offset); (*get)(struct gpio_chip *chip, unsigned offset); (*direction_output)(struct gpio_chip *chip, unsigned offset, int value); (*set)(struct gpio_chip *chip, unsigned offset, int value); }; int gpio_request(unsigned gpio, const char *label); void gpio_free(unsigned gpio); int gpio_direction_input(unsigned gpio); int gpio_direction_output(unsigned gpio, int value); int gpio_get_value_cansleep(unsigned gpio);

CLOCK 管理 v 提供统一的 clk_get clk_put 等 API: EXPORT_SYMBOL(clk_get); EXPORT_SYMBOL(clk_put); EXPORT_SYMBOL(clk_enable); EXPORT_SYMBOL(clk_disable); EXPORT_SYMBOL(clk_get_rate); EXPORT_SYMBOL(clk_round_rate); EXPORT_SYMBOL(clk_set_rate); EXPORT_SYMBOL(clk_get_parent); EXPORT_SYMBOL(clk_set_parent);

DMA 管理 v 统一的 DMA API 支持 : int request_dma(unsigned int chan, const char * device_id); void free_dma(unsigned int chan); void enable_dma(unsigned int chan); void disable_dma(unsigned int chan); void set_dma_mode (unsigned int chan, unsigned int mode); void set_dma_sg(unsigned int chan, struct scatterlist *sg, int nr_sg);

vmap_desc 和 iotable_init static struct map_desc s3c_iodesc[] initdata = { }; { }, {... },.virtual.pfn.length.type = (unsigned long)s3c_va_sys, = phys_to_pfn(s3c64xx_pa_syscon), = SZ_4K, = MT_DEVICE, IO 内存静态映射 void init s3c64xx_init_io(struct map_desc *mach_desc, int size) { } iotable_init(s3c_iodesc, ARRAY_SIZE(s3c_iodesc)); iotable_init(mach_desc, size);

platform_device 和资源 v platform_device 和 resource static struct resource smdk6410_smsc911x_resources[] = { }; [0] = {.start = 0x18000000,.end = 0x18000000 + SZ_64K - 1,.flags = IORESOURCE_MEM, }, [1] = { },.start = S3C_EINT(10),.end = S3C_EINT(10),.flags = IORESOURCE_IRQ IRQ_TYPE_LEVEL_LOW, static struct platform_device smdk6410_smsc911x = {.name = "smsc911x",.id = -1,.num_resources = ARRAY_SIZE(smdk6410_smsc911x_resources),.resource = &smdk6410_smsc911x_resources[0], };

platform 数据 v 提供与板相关的硬件设置数据 static struct smsc911x_platform_config smdk6410_smsc911x_pdata = { };.irq_polarity = SMSC911X_IRQ_POLARITY_ACTIVE_LOW,.irq_type = SMSC911X_IRQ_TYPE_OPEN_DRAIN,.flags = SMSC911X_USE_32BIT SMSC911X_FORCE_INTERNAL_PHY,.phy_interface= PHY_INTERFACE_MODE_MII, static struct platform_device smdk6410_smsc911x = { };....dev = { },.platform_data= &smdk6410_smsc911x_pdata, struct smsc911x_platform_config 由对应设备的驱动定义, 而 platform_data 则由驱动引用

vspi_board_info static struct spi_board_info initdata jive_spi_devs[] = { }; [0] = { }, { },.modalias.bus_num = 1,.chip_select = 0, = "VGG2432A4",.mode = SPI_MODE_3, /* CPOL=1, CPHA=1 */.max_speed_hz = 100000,.platform_data = &jive_lcm_config,.modalias.bus_num = 2,.chip_select = 0, = "WM8750",.mode = SPI_MODE_0, /* CPOL=0, CPHA=0 */.max_speed_hz = 100000, SPI 板级信息 spi_register_board_info(jive_spi_devs, ARRAY_SIZE(jive_spi_devs));

vi2c_board_info static struct i2c_board_info i2c_devs0[] initdata = { { I2C_BOARD_INFO("24c08", 0x50), }, { I2C_BOARD_INFO("wm8580", 0x1b), }, I 2 C 板级信息 #ifdefconfig_smdk6410_wm1190_ev1 { I2C_BOARD_INFO("wm8350", 0x1a), }, #endif };.platform_data = &smdk6410_wm8350_pdata,.irq = S3C_EINT(12), static void init smdk6410_machine_init(void) {... i2c_register_board_info(0, i2c_devs0, ARRAY_SIZE(i2c_devs0)); i2c_register_board_info(1, i2c_devs1, ARRAY_SIZE(i2c_devs1));... }

MACHINE_START MACHINE_START(SMDK6410, "SMDK6410") /* Maintainer: Ben Dooks <ben@fluff.org> */.phys_io = S3C_PA_UART & 0xfff00000,.io_pg_offst= (((u32)s3c_va_uart) >> 18) & 0xfffc,.boot_params = S3C64XX_PA_SDRAM + 0x100,.init_irq = s3c6410_init_irq,.map_io = smdk6410_map_io,.init_machine = smdk6410_machine_init,.timer = &s3c24xx_timer, MACHINE_END

范例 : 添加 LDD6410 板 u 修改 Kconfig 和 Makefile: linux-2.6.31/arch/arm/mach-s3c6410/kconfig + config MACH_LDD6410 + bool "LDD6410" + select CPU_S3C6410 + select S3C_DEV_FB + select S3C64XX_SETUP_FB_24BPP + help + Machine support for the LDD6410 + config MACH_SMDK6410 bool "SMDK6410" select CPU_S3C6410 linux-2.6.31/arch/arm/mach-s3c6410/makefile + obj-$(config_mach_ldd6410) += mach-ldd6410.o obj-$(config_mach_smdk6410) += mach-smdk6410.o obj-$(config_mach_ncp) += mach-ncp.o u 增加新板子的文件 : linux-2.6.31/arch/arm/mach-s3c6410/mach-ldd6410.c

文档与参考实例 v Linux-2.6/arch/arm/ v http://code.google.com/p/ldd6410/ v 获取 LDD6410 源代码 : svn checkout http://ldd6410.googlecode.com/svn/trunk/ ldd6410-read-only

Linux 设备驱动开发详解 v 主要出发点 : 力求用最简单的实例讲解复杂的知识点, 以免实例太复杂搅浑读者 ( 驱动理论部分 ) 对 Linux 设备驱动多种复杂设备的框架结构进行了全面的介绍 ( 驱动框架部分 ) 更面向实际的嵌入式工程, 讲解开发必备的软硬件基础, 及开发手段 ( 调试与移植部分 ) 提供讨论与交流平台 ( 华清远见,www.linuxdriver.cn)

筹备出版中 Linux 设备驱动开发详解第 2 版 v 主要出发点 开发 LDD6410 SAMSUNG S3C6410 开发板, 所有实例均可在该板上直接运行和学习 全面升级为 Linux 2.6.31 内核, 对 Linux 内核最新 API 和驱动子系统架构的变化进行介绍 对第一版中部分知识点进行整理和重新讲解 删除过时内容 新增大量内容 : multi-touch 触摸屏驱动 CAMERA V4L2 驱动 SPI 主机和设备驱动 ALSA SoC 架构驱动 USB 设备控制器 /gadget 驱动 /USB OTG 驱动 SD/MMC 驱动 内核移植 (BSP 构建与开发 ) Android 移植

华清远见 Linux 驱动课程 v 嵌入式 Linux 驱动初级班 v 通过本课程的学习, 学员可以掌握 Linux 下字符设备 块设备 网络设备的驱动程序开发, 同时掌握嵌入式 Linux 的系统开发和分析方法 v 嵌入式 Linux 驱动开发高级班 v 本课程以案例教学为主, 系统地介绍 Linux 下有关 FrameBuffer MMC 卡 USB 设备的驱动程序开发 v 班级规模及环境 v 为了保证培训效果, 增加互动环节, 我们坚持小班授课, 每期报名人数限 15 人, 多余人员安排到下一期进行 人手一套开发板和开发用的 PC 主机

让我们一起讨论!

The success's road www.farsight.com.cn 谢谢!