S5pc100平台wifi模块驱动移植分析
- 格式:doc
- 大小:148.00 KB
- 文档页数:5
揭开芯面纱主流平板电脑方案深度剖析国内首选瑞芯微RK2818瑞芯微的RK2808大家一定不陌生,在年初时蓝魔出的第一款MID就是在这一芯片上运行的。
现在看来虽然仅仅600MHz的CPU稍显迟缓,与800MHz的iPod touch 3叫嚣有些妄言,但是为今后的蓝魔系列产品以及更多的国内厂家奠定了一个正确的方向。
在暑期结束后,瑞芯微推出了其升级版RK2818,也是目前瑞芯微运行速度最高的芯片,较之前作,其CPU升级到660MHz,内存也由之前的SDRAM升级到DDR2,并在此基础上增添了3D加速功能。
RK2818具备视频硬件加速,视频播放效果更好,在前者不能达到的分辨率支持上,最高可以支持1024x600分辨率。
当然,我们不得不正视的一点是ARM9核心也是有着极其脆弱的地方,内核的袖珍虽然将成本降低,省电固然是好,但是频率的升级始终是其最大的障碍,这就是为什么与touch相比在速度上总是输一大块的原因。
可喜的是瑞芯微RK2818的应用范围也不仅仅局限于MID方案之上,在智能手机、无线电子书方面均有其身影。
现在已经成熟运用在Android 2.1系统上,Android 2.2也是迟早的事。
据悉,及RK2818之后将会出品RK29系列,不知能否会给消费者更大的惊喜。
瑞芯微电子优点:国产芯片中最高配置,广泛应用于Android 2.1系统,增添3D加速功能。
缺点:CPU速度相比国际知名大厂来说较慢。
附芯片相关参数:1、采用ARM+DSP+GPU架构2、Android 2.1 R2(Eclair)操作系统3、MLC (2G~32GB) 24bit ECC(内存校验), DDRII(128MB~512MB)内存4、触屏支持800×480,800×600,1024×600分辨率5、支持 Wi-Fi interal,支持外置3G模块(TD,WCDMA,EVDO)6、USB 2.0接口,并支持 OTG功能7、支持YouTube等在线视频,最高可达720P8、支持HTML5 视频播放9、支持DC和VCR功能代表产品:蓝魔W9W9产品介绍:蓝魔W9机身三围为120mm*195mm*18.5mm,重300g。
s5pv210 uboot-2012-10的移植s5pv210 uboot-2012-10移植(一) 之分析Alex Ling的linaro-2011.10 for mini210好久好久前就买了s5pv210的开发板,一直都是东搞搞西搞搞,一点收获也没有,这次下决心来移植最新的uboot到u-boot-2012.10上,并通过这个博客记录下来以防时间长给忘了,我的开发板是QT210的。
s5pv210的启动分为BL0,BL1,BL2,BL0是出厂的时候就固化在IROM里的,所以我们的uboot就要实现BL1和BL2,BL1在uboot里叫做u-boot-spl.bin,BL2就是我们很熟悉的u-boot.bin了。
在移植之前,我们先看下Alex Ling 的linaro-2011.10 for mini210的UBOOT是怎么实现的。
这里主要还是分析SPL部分,u-boot.bin是如何生成的现在资料很多,也很复杂,我这个菜鸟也是一知半解的,所以就不分析了。
1.顶层的Makefile,从中可以知道,我们要想生成u-boot-spl.bin就必须配置COFNIG_SPL,那么u-boot-spl.bin依赖什么呢,我们继续[plain]view plaincopy1.ALL-$(CONFIG_SPL) += $(obj)spl/u-boot-spl.bin2.3.all: $(ALL-y)搜索发现,是进入到uboot顶层目录的spl目录下执行Makefile的[plain]view plaincopy1.$(obj)spl/u-boot-spl.bin: depend2. $(MAKE) -C spl all2.打开spl/Makefile分析,一开始就给我们导出CONFIG_SPL_BUILD[plain]view plaincopy1.CONFIG_SPL_BUILD := y2.export CONFIG_SPL_BUILD然后分析目标,因为我们的平台是三星的,所以,会有两个目标,一个是不带头信息的u-boot-spl.bin,一个是$(obj)$(BOARD)-spl.bin。
USB驱动移植教程一.USB驱动框架在Linux系统中,提供了主机侧和设备侧视角的USB驱动框架,这里,仅仅讲解主机侧角度看到的USB驱动框架。
从主机侧的角度而言,需要编写的USB驱动程序包括主机控制器驱动和设备驱动两类。
USB主机控制器驱动程序控制插入其中的USB设备,而USB设备驱动程序控制该设备如何作为设备与主机通信。
在USB主机控制器驱动和USB设备驱动之间还有一层叫USB核心层。
USB核心负责USB驱动管理和协议处理工作,它通过定义一些数据结构、宏和功能函数,向上为USB设备驱动提供编程接口,向下为USB主机控制器驱动提供编程接口;通过全局变量维护整个系统的USB设备信息,完成设备热插拔控制、总线数据传输控制等。
说了那么多,无图无真相啊~~Linux USB主机侧驱动总体框架二.USB驱动移植步骤1.S5PV210主机控制驱动的移植USB主机控制器有3种规范,UHCI(Universal Host Controller Interface),这种规范主要是Intel、Via芯片公司提供支持PC主板的;OHCI(Open Host Controller Interface),这种规范是微软提出来的,主要应用在非PC系统上的嵌入式领域上的USB芯片;EHCI(Enhanced Host Controller Interface),这种后来为提高USB速度而提出的规范,它支持最高速度为480Mbps。
在《S5PV210_UM_REV1.1》手册上搜索OHCI关键词,会发现下面一段话这表明S5PV210这款CPU支持一个USB主机接口,同时支持EHCI和OHCI这两种规范,支持USB1.1和USB2.0规范,支持最高的外设传输速率为480Mbps。
注意了,它并不支持USB3.0规范的USB设备,所以做测试的时候,千万不要拿USB3.0规范的USB设备去测试。
2.1移植ohci-s5p驱动打开内核目录:driversusbhost,发现Linux系统提供了大量的主机控制器驱动,找遍所有平台,都没有找到ohci-s5p.c源码。
中断原理及应用---闵建有过裸机开发经验的工程师都很清楚中断的重要性。
学习一款处理器,异常处理机制可谓是其精髓所在,而硬件中断又是异常处理中的一种很典型并且使用很频繁的情况。
把握这一块内容需要大家明了两个方面的内容。
(1)处理器的异常处理机制(中断是处理器众多异常中的一种)(2)SOC对中断的硬件支持(中断控制器)接下来以三星公司生产的基于ARM 核为CORTEX-A8的SOC,型号为S5PC100, 来阐述下中断的原理及使用。
1.中断的概念。
中断,顾名思义,就是打断一个正在发生的事件。
其中包括三方面的内容:1 是打断当前的事件;2 处理紧急事件 3 回到之前打断的事件继续执行。
举个简单的例子,比如老师正在讲课,你有非常重要的事件需要老师帮你解决,于是你举手打断老师讲的内容去处理你的问题,老师解决了你的问题后又回到被打断前的内容接着往下讲。
由这个简单的例子你可以看出来一个完整的中断流程需要注意几个方面的问题:1 必须有一种途径能打断正在进行的事件(如学生举手);2 打断后必须能顺利的去执行一个更为紧迫的事件(如果多个学生都有问题的话,势必要定位哪个问题是哪个学生提出的,并且还要考虑多个学生同时申请问题的情况)3 怎么顺利返回去(老师回到之前讲课的内容)。
1.1 中断的产生先来解决第一个问题也就是中断怎么发生的,图1 经典ARM核内部框图上图为一款ARM核内部框图,注意看标红的部分。
ARM核会引出两根线,一根为IRQ中断线,一根为FIQ中断线。
由于IRQ 跟FIQ 在原理上相似,我们在这边不花篇幅去讲其区别,仅拿IRQ来描述中断的原理。
看到这里大家应该能明白什么情况下处理器核会接收到中断,注意仅仅是能接受到中断,能不能响应是另一码事。
为什么这么说呢?CPU核可能有的时候做的事情要比中断请求更为紧迫,比如刚加电做初始化的时候,这个时候如果这个管脚产生电平变化,可能ARM核也不会去管,也就是说在ARM内部把中断的功能给禁止掉。
linux下移植之WIFI驱动2010-05-14 22:271.前言硬件平台: imx27+sd8686软件平台: linux内核: 2.6.272.移植思想1, WIFI 模块本身和 cpu 之间的接口;我们的模块和 cpu 之间的接口是 sdio 的,也就是说必须要先保证SDIO 本身是工作的,与SD卡,MMC属于同类型。
主要用到这几个GPIO引脚SD0...SD3,SD2_CMD,SD2_CLK,以及复位引脚PB24.2, WIFI 模块本身的上电时序;模块都有它自己的规律,所以必须要根据 spec 了解它本身的上电过程,严格遵守;3,以太网接口的创建;我们的 WIFI 模块本身是建立在 SDIO 口之上的,而对上都是提供以太网接口的,所以必须要保证这个接口以及创建;4,特殊处理;不同的模块都有它特别的地方,比如我们用的是 8686 和 compo 也就是说它和蓝牙共用天线,所以需要在初始化的时候做特殊的处理,发送特殊的命令,才能工作;3.移植过程1,sdio本身是通过gpio口模拟的,所以需要对gpio口进行配置;static mfp_cfg_t littleton_mmc3_pins[] = {GPIO7_2_MMC3_DAT0,GPIO8_2_MMC3_DAT1,GPIO9_2_MMC3_DAT2,GPIO10_2_MMC3_DAT3,GPIO103_MMC3_CLK,GPIO105_MMC3_CMD,};2,wifi模块本身的初始化;#define MFP_WIFI_V18_ENABLE (GPIO26_GPIO)#define MFP_WLAN_RESETN (GPIO99_GPIO)#define WIFI_WAKEUP_HOST (GPIO104_GPIO) /*error must be changed*/#define WLAN_ENABLE_PIN 26#define WLAN_RESET_PIN 99#define M200_B#ifdef M200_B#define BT_RESET_PIN EXT1_GPIO(1)#define BT_RESET_GPIO (GPIO1_2_GPIO)#else#define BT_RESET_GPIO (GPIO6_2_GPIO)#define BT_RESET_PIN EXT1_GPIO(6)#endifstatic mfp_cfg_t lin2008_wifibt_pins[] = {MFP_WIFI_V18_ENABLE,MFP_WLAN_RESETN,WIFI_WAKEUP_HOST,/*wakeup host*/};static mfp_cfg_t lin2008_wifibt_pins2[] = {MFP_WIFI_V18_ENABLE,};static int wifibt_power_status;int lin2008_poweron_wifibt_board(void){if (!wifibt_power_status) {mxc_mfp_config(ARRAY_AND_SIZE(lin2008_wifibt_pins)) ;gpio_direction_output(WLAN_ENABLE_PIN, 1);gpio_direction_output(WLAN_RESET_PIN, 1);gpio_direction_output(BT_RESET_PIN,1);mdelay(10);gpio_direction_output(BT_RESET_PIN, 0);gpio_direction_output(WLAN_RESET_PIN, 0);// bt need > 5 ms to resetmdelay(5);gpio_direction_output(BT_RESET_PIN, 1);gpio_direction_output(WLAN_RESET_PIN, 1);wifibt_power_status++;return 0;}wifibt_power_status++;return 1;}int lin2008_poweroff_wifibt_board(void){wifibt_power_status--;if (!wifibt_power_status) {mxc_mfp_config(ARRAY_AND_SIZE(lin2008_wifibt_pins2) );gpio_direction_output(WLAN_ENABLE_PIN, 0);return 0;}return 1;}3,以太网接口的创建这里在 android 平台上要做特殊的处理,也就是 firmware 的位置要放好,否则加载 firmware 始终不成功,那么以太网接口就不会被创建了;需要把 helper_sd.bin 放在 /lib/firmware/mrvl 下面(若没有,则创建一个);把 sd8686.bin 放在 /lib/firmware/mrvl 下面(同上);4,特殊的处理对于 8686 模块需要做特殊的处理,在注册完以太网接口以后,需要添加下面这段话 :{#define BCA_CFG_NUM_OF_MODES 4#define BCA_CFG_SINGLE_ANT_WITH_COEX 0#define BCA_CFG_DUAL_ANT_WITH_COEX 1#define BCA_CFG_SINGLE_ANT_FOR_BT_ONLY 2#define BCA_CFG_MRVL_DEFAULT 3#define BCA_CONFIG BCA_CFG_SINGLE_ANT_WITH_COEXstatic u32 BCACfgTbl[BCA_CFG_NUM_OF_MODES][3] = {//0xA5F0, 0xA58C, 0xA5A0{ 0xa027181c, 0x40214, 0xd24d}, //Mode 0: Single ANT with COEX enable{ 0xa027181c, 0x40211, 0xd24d}, //Mode 1: Dual ANT with COEX enable{ 0xa027181c, 0x40222, 0xd21c}, //Mode 2: single ANT for BT only{ 0xa027801d, 0x18000, 0xd21c}, //Mode 3: Marvell default};wlan_offset_value RegBuffer;RegBuffer.offset = (0xA5F0);RegBuffer.value = BCACfgTbl[BCA_CONFIG][0];wlan_prepare_cmd(priv,HostCmd_CMD_MAC_REG_ACCESS,HostCmd_ACT_GEN_SET,HostCmd_OPTION_WAITFORRSP,0,&RegBuffer);RegBuffer.offset =(0xA58C);RegBuffer.value = BCACfgTbl[BCA_CONFIG][1];wlan_prepare_cmd(priv,HostCmd_CMD_MAC_REG_ACCESS,HostCmd_ACT_GEN_SET,HostCmd_OPTION_WAITFORRSP,0,&RegBuffer);RegBuffer.offset = (0xA5A0);RegBuffer.value = BCACfgTbl[BCA_CONFIG][2];wlan_prepare_cmd(priv,HostCmd_CMD_MAC_REG_ACCESS,HostCmd_ACT_GEN_SET,HostCmd_OPTION_WAITFORRSP,0,&RegBuffer);}基本上这样就可以工作了;4.其它问题Sdio 口默认是用的 3.2V 这里需要修改相关的地方强制设成是1.8V ,否则 SDIO 接口将无法工作;Linux平台上需要移植一些上层软件才能验证,比如iwconfig , iwlist 等。
嵌入式系统是物联网产业发展的核(作者:中嵌协会柏斯维)2009年8月7日**总理视察无锡时,提出在无锡加快建立“感知中国”中心的指示。
从此在国内不管是各级地方政府还是企业都很重视,并掀起了一个追逐物联网的行动热潮。
一年过去了,再一次的解读温总理的“感知中国”更具有现实意义和深远的历史意义。
嵌入式与物联网的关系温总理用经典的四个字“感知中国”全面描述和定义了物联网产业的内涵。
从字面上来理解,“感”既是信息采集(传感器);“知”信息处理(运算、处理、控制、通信并通过互联网进行信息传递和控制)。
这些都是嵌入式系统的特征实质。
如果归纳一句话来理解总理“感知中国”的含义,既是通过嵌入式系统智能终端产品网络化的过程实现感知的目的。
简单讲,物联网是物与物、人与物之间的信息传递与控制。
专业上讲就应该是智能终端的网络化。
大家都知道,嵌入式系统无所不在,有嵌入式系统的地方才会有物联网的应用。
所以,我在所有的场合都在传播一个理念,什么是物联网呢?物联网就是基于互联网的嵌入式系统。
从另一个意义也可以说,物联网的产生是嵌入式系统高速发展的必然产物,更多的嵌入式智能终端产品有了联网的需求,催生了物联网这个概念的产生。
记得是在09年10月12日,英特尔公司宣布成立中国研究院并且专攻嵌入式方向。
在全球热炒物联网概念时,英特尔为什么不成立物联网研究院?而专注嵌入式的研究呢。
这是值得深思研究的课题。
那么,在2010英特尔信息技术峰会(IDF)的前一天,英特尔CTO贾斯汀和英特尔研究院方之熙院长一起宣布了英特尔中国研究院全新的研究战略——致力于打造世界一流的嵌入式系统研究院。
方院长讲到:作为英特尔研究院全球5大节点之一,英特尔中国研究院将承担嵌入式系统的前瞻性研究任务,放眼全球嵌入式增长机遇,融合国人智慧做世界级的研究,并将国际水准的研究成果直接贡献于中国的发展。
中国手机、互联网、有线电视用户人数均居全球第一,也已成为名副其实的世界第一汽车市场。
驱动编程1 模块的概述 (2)2 source insight 加载内核源码方法 (2)3 模块makefile的编写 (3)4 模块makefile编写方法 (4)5 在X86上运行模块: (5)6 编写模块 (5)7 模块的加载进内核命令 (5)8 最简单的上层调用+ 调用驱动方法 (6)9 复杂框架上层应用+驱动调用方法 (7)10 复杂框架字符设备创建并注册过程 (7)11 file_operations常用函数 (9)12 同步互斥操作 (10)13 同步互斥函数总结 (10)14 阻塞IO编程流程 (11)15 轮询操作上层select 下层poll (12)16 信号处理 (12)17 中断 (13)18 中断新模型--上半部中断和下半部中断的实现 (14)19 内核定时器编程 (15)20 内核延时函数 (15)21 内核源代码中头文件分配方式 (15)22 linux内核管理和内核的内存管理 (16)23 设备io端口和io内存访问–如何控制led的亮灭 (16)24 * 驱动-设备分离思想编程————内核进阶 (18)25 驱动-设备分离-核心最小架构 (18)26 驱动设备分离思想- 上层架构(基于封装) (20)27 头文件总结 (24)28 设置系统自启动命令u-boot (24)第一天需要理清的东西1)模块的概念,模块与应用的区别2)模块主要的组成头文件、module_init() modoule_exit() module_lisence()3)模块的如何编辑,如何编译,如何加载到内核中运行使用makefile4)模块驱动编写,必须通过上层应用程序调用。
1模块的概述模块是内核的一部分,为了防止内核太大,把它放在文件系统里面。
也可以在编译内核的直接编译进内核。
1,存储位置可以在开始时编译进内核,也可以编译进模块,最后加载2、运行时环境在哪个内核树下编译,就对应这个运行环境3、模块的编译问题:前提条件是需要对应的内核源码树,或者必须有对应的内核版本匹配4、模块编译使用makefile 注意makefile的编写2source insight 加载内核源码方法在windows下创建工程,使用source insight查看内核代码:2.1 先将内核源码拷到对应的文件夹2.2 在source insight 里添加工程,筛选需要添加的文件注意选择按照树来添加,然后按照remove来踢出不需要的文件夹2.3 最后同步3模块makefile的编写模块的编译:1)、模块编译的核心语句:$(MAKE) -C $(KERNELDIR) M=$(PWD) modules-C :进入内核源码树M= : 返回到当前目录,再次执行该目录下的makefileeg: /tnt/abc.c -----> abc.ko1、在/tnt目录下敲make,只有/tnt目录下的Makefile被调用2、目的是要进入到内核源码树中,一进一回,-C来进,M=带着内核源码树中的makefile的功能回来了-------内核源码树中Makefile的目标:obj-y:汇集了所有编译进内核的目标文件obj-m:汇集了所有编译成模块的目标文件3、回来过后,我们只有确定obj-m变量的集合4、make modules告诉内核的makefile,只做编译模块的功能4模块makefile编写方法ifeq ($(KERNELRELEASE),)KERNELDIR := /work/linux-2.6.35-farsightPWD := $(shell pwd)modules:$(MAKE) -C $(KERNELDIR) M=$(PWD) modulesinstall:$(MAKE) -C $(KERNELDIR) M=$(PWD) modules_installclean:rm -rf .tmp_versions *.ko *.o .*.cmd *.mod.c *.order *.symvers.PHONY: modules cleanelseobj-m := ex1.oendif以上是makefile的内容,●注意原来的内核目录树不要进行make clean 或者make distclean●KERNELDIR 表示模块加载在哪个内核的文件夹(又叫内核源码树),●$(MAKE) -C $(KERNELDIR) M=$(PWD) modules 表示进入该内核文件夹,将顶层makefile 中的内容带回,再重新执行一次该makefile 将obj-m := ex1.o 编译,并执行make modules (并只编译ex1.c ,不编译其它模块)●$(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install 表示执行顶层makefile的modules install 标签下的命令●安装的位置原来默认在/lib 下面,所以需要修改其到我们制作的根文件系统下/work/rootfs/在顶层Makefile位置搜索:MODLIB修改为:●obj-m := ex1.o 你需要编译的.c的文件名****************************此时简单的编译环境已经搭建完毕******************* ****************************执行make ***********************************************执行make install *******************在/work/rootfs/lib/modules/2.6.35/extra即可找到该模块.ko*****************************************************************************搭建好环境,保证虚拟机与板子与计算机网络连通,并设置板子u-boot 从nfs挂载,启动内核,并成功通过nfs 加载rootfs,此时环境完毕,进入/work/rootfs/lib/modules/2.6.35/extra ,找到模块,加载卸装模块操纵5在X86上运行模块:修改Makefile中的内核源码树的目录X86下的内核源码树:/lib/modules/2.6.35-22-generic/build如果没有在控制台上交互,默认是看不到信息的,需要dmesg这个命令去查看6编写模块模块最小组成如下:●注意:module_init module_exit 必须放在末尾●注意:函数的原型返回值●头文件7模块的加载进内核命令insmodrmmodlsmod8最简单的上层调用+ 调用驱动方法8.1 首先在module_init(abc) abc函数中注册设备register_chrdev(注册设备号,上层可见的设备名,操作封装)该函数完成设备注册,在板子上用cat /proc/devices 便可以看见该设备8.2 完成fops 操作的封装●注意格式●必须在函数后面声明该结构体●头文件#include <linux/fs.h>8.3 查看到该字符设备后,创建设备节点,则上层通过设备字符名与该设备号绑定mknod /dev/hf_char c 245 0ls /dev/ 可以查看注册的所有设备节点8.4 此时上层应用的open(”hf_char”,O_RDWR),即可完成该设备的打开,即可以完成上层应用于下层驱动相关fops 的操作。
wifi模块解决方案
《wifi模块解决方案》
随着物联网技术的发展,wifi模块已经成为了各种智能设备的重要组成部分。
但是在实际应用中,wifi模块也面临着一些问题,如稳定性、传输速度、功耗等方面存在一定的挑战。
为了解决这些问题,各大厂商和研究机构都在不断地探索和创新,提出了不同的解决方案。
首先,在稳定性方面,一些厂商通过改进硬件设计和优化传输协议来提高wifi模块的稳定性。
例如,采用更先进的天线设计,增加信号接收的灵敏度,提高信号覆盖范围等措施来确保设备在复杂环境下也能够稳定连接网络。
其次,在传输速度方面,一些厂商利用新的技术和算法来提高wifi模块的数据传输速度。
例如,采用MIMO技术来增加数据传输通道,采用更高的工作频率来提高传输速度等方式来优化wifi模块的性能。
另外,在功耗方面,一些厂商则采用了一些节能的技术来减小wifi模块的功耗。
例如,采用低功耗的芯片和电路设计,采用更有效的休眠和唤醒机制来减小待机状态下的功耗等手段来降低设备的能耗。
综上所述,针对wifi模块所面临的一些问题,一些厂商和研究机构都在不断地进行技术创新和产品优化,提出了各种解决
方案。
通过这些努力,相信wifi模块在未来的发展中将会更加成熟和完善,为物联网的发展提供更好的支持。
FS_S5PC100平台用户手册北京华清远见研发中心2011年10月14日目录第一章FS_S5PC100开发平台介绍 (1)1.1开发板外观 (1)1.2开发板硬件资源 (2)1.3开发板配套模块 (1)1.4功能展示 (2)第二章系统安装和运行 (20)2.1设备连接 (20)2.2工具软件的设置 (20)2.3U-Boot镜像的下载与烧写准备 (24)第一章FS_S5PC100开发平台介绍FS_S5PC100开发平台采用三星公司基于Cortex-A8内核的S5PC100处理器设计而成。
此平台主要应用于华清远见的嵌入式系统教学,以适应Android、Linux、Wince等智能操作系统的发展及市场需求。
华清远见研发中心及教师团队将不断完善推广平台资料,帮助大家快速掌握高端嵌入式技术。
华清远见研发中心有自己的论坛,我们会经常在上面发布相关资源,也欢迎各位来论坛交流提问。
论坛地址:/FarsightBBS/index.asp?boardid=84S5PC100处理器采用了64/32位的内部总线结构,和最大833M赫兹的运算速度。
包括强大的硬件加速器,如:动态视频处理,显示控制和缩放。
支持多种格式的硬件编解码:MPEF-1/2/4、H263/H264等。
其视频解码能力很强大并且省电,编解码能力达到720p@30fps(1280x720)支持电视输出(NTSC/PAL/HDMI)。
支持2D/3D加速。
本处理器广泛的应用于智能手机、平板电脑等产品。
1.1开发板外观1.2开发板资源FS_S5PC100拥有丰富的硬件资源:处理器Samsung公司的S5pc100处理器NAND Flash256MB NAND FlashNor Flash2MBDDR2内存256MB显示输出接口LCD接口、VGA接口、TVout接口、HDMI接口视频输入接口Camera接口串口2路5线串口、1路3线串口SD卡接口支持大容量SD卡SPI Flash用于SPI实验温度传感器基于I2C接口电位器用于模拟量输入4路USB Host1路USB2.0-OTG蜂鸣器用于PWM实验100M网络接口DM9000AEWIFI接口Marvell8686AC97音频接口WM9714芯片按键6个按键LED4个LED音频功放接口可直接驱动喇叭红外收发接口可以实现红外数据通信FS_S5PC100软件资源:Android2.1系统源代码Linux2.6.29系统源代码外设接口测试源代码Linux、Android系统下的720P高清播放、Camera、Wifi等功能的测试源码Uboot-1.3.4源码支持usb、网络通讯FS_S5PC100辅助学习资料(此部分提供文档、源码资料,但不提供技术支持)ARM处理器接口实验(裸机编程)1、LED实验2、A/D实验3、按键中断实验4、PWM实验5、I2C实验6、SPI实验7、mmu实验8、Nor Flash读写实验9、Nand Flash读写实验10、串口实验11、Lcd实验12、Camera实验Linux系统移植实验1、Uboot移植实验2、Linux-2.6.35下DM9000网卡驱动移植实验3、Linux-2.6.35下SD卡驱动移植实验4、Linux-2.6.35下Nand Flash驱动移植5、Linux-2.6.35下LCD驱动移植6、Linux-2.6.35下USB驱动移植7、Linux-2.6.35下触摸屏驱动移植Linux系统驱动实验1、Linux-2.6.35下LED驱动实验2、Linux-2.6.35下PWM驱动实验3、Linux-2.6.35下按键中断实验4、Linux-2.6.35下A/D驱动实验(基于三星AD子系统)5、Linux-2.6.35下I2C温度传感器(基于I2C子系统)6、Linux-2.6.35下SPI实验(基于SPI子系统)Android 1、HAL实验,实现LED驱动2、Android下控制串口实验3、Android下Sensor实验,实验温度采集1.3开发板配套模块目前FS_S5PC100平台提供三款配套模块,方便用户选择和使用,节省用户学习和开发时间。
u_boot 移植(一)之uboot配置编译一 、开发环境PC OS : Ubuntu 14.04SOC : 基于ARM Cortex-a8 核的S5PC100开发板 : FSC100u_boot : u-boot-2010.03编译器 : arm-cortex_a8-linux-gnueabi-gcc version 4.4.6二、目标1.Uboot 能从FSC100的 Nand Flash 正常启动2.Uboot 支持DM9000 网卡3.Uboot 支持Nand Flash 读、写、擦除4.Uboot 支持Linux 内核引动好了,接下来就进行移植uboot到FSC100开发板吧 。
三、建立自己的平台1、 下载源码我们可以在下面这个网站上下载最新的和以前任一版本的 ubootftp://ftp.denx.de/pub/u-boot/2、 解压 uboot 源码并进入目录tar zxvf u-boot-2010.03.tar.gzcd u-boot-2010.03u-boot-2010.3 源码中已经支持了SMDKC100了(SMDKC100是三星公司基于SOC : S5PC100设计的一块开发板)。
我们的FSC100使用的SOC也是S5PC100,所以我们只需要稍加修改Uboot支持的SMDC100代码,就可以编译出支持我们的FSC100开发板的uboot了。
1.修改 u-boot 顶层目录下的 Makefile,指定交叉工具链在ifeq ($(HOSTARCH, $(ARCH))CROSS_COMPILE ?=endif下添加:ifeq (arm, $(ARCH))CROSS_COMPILE ?= arm-cortex_a8-linux-gnueabiendif2.在 u-boot 顶层目录下的 Makefile 中添加 fsc100 配置信息在smdkc100_config: unconfig@$(MKCONFIG) $(@:_config=) arm arm_cortexa8 smdkc100 samsung s5pc1xx下添加:fsc100_config: unconfig@$(MKCONFIG) $(@:_config=) arm arm_cortexa8 fsc100 samsung s5pc1xx3. 添加 fsc100 平台信息(1)进入board/samsung目录(2)拷贝smdkc100 为 fsc100(3)进入fsc100目录下修改smdkc100.c 为fsc100.c修改Makefile中的smkc100.o 为fsc100.o(4)进入include/configs目录,拷贝smdkc100.h为fsc100.hinclude/configs目录下的.h文件为对应开发板的配置文件。
wifi模块实验报告Wi-Fi模块实验报告引言:随着物联网的快速发展,Wi-Fi技术在我们日常生活中扮演着越来越重要的角色。
Wi-Fi模块作为连接无线网络的关键组件,其性能和稳定性对于设备的正常运行至关重要。
本文将对Wi-Fi模块进行实验研究,评估其性能和功能,以期为相关领域的研究和应用提供参考。
一、实验目的本次实验的目的是对Wi-Fi模块进行功能和性能的测试,包括传输速率、覆盖范围、稳定性等方面的评估。
通过实验结果,我们可以了解Wi-Fi模块在不同环境下的表现,并为后续的研究和应用提供依据。
二、实验方法1. 实验设备和环境本次实验使用了一台笔记本电脑作为Wi-Fi模块的控制终端,同时还准备了一台智能手机和一台平板电脑作为Wi-Fi模块的连接设备。
实验环境为一个室内实验室,没有遮挡物。
2. 实验步骤(1)搭建Wi-Fi网络首先,我们在笔记本电脑上安装了Wi-Fi模块的驱动程序,并通过设置将Wi-Fi模块设置为热点模式。
然后,我们在智能手机和平板电脑上搜索并连接该热点。
(2)测量传输速率我们使用了一个网络测速工具来测试Wi-Fi模块的传输速率。
通过在笔记本电脑上下载和上传文件,记录传输速率的平均值,并与标准的Wi-Fi速率进行比较。
(3)测试覆盖范围为了测试Wi-Fi模块的覆盖范围,我们将智能手机和平板电脑分别放置在不同的位置,并记录连接的稳定性和信号强度。
通过改变设备的位置和距离,我们可以评估Wi-Fi模块的覆盖范围和信号衰减情况。
三、实验结果与分析1. 传输速率经过多次测试,我们得出了Wi-Fi模块的平均传输速率为XX Mbps。
与标准的Wi-Fi速率相比,我们可以看出Wi-Fi模块的性能较为稳定,符合预期。
2. 覆盖范围在实验过程中,我们发现Wi-Fi模块的覆盖范围受到环境和障碍物的影响。
在直线距离上,Wi-Fi信号的衰减情况较为明显,但在有障碍物的情况下,信号的传输受到更大的干扰。
因此,在设计和应用中,需要合理安排Wi-Fi模块的位置和信号覆盖范围。
linux spi驱动分析整理1、SPI总线:SPI(同步外设接口)是由摩托罗拉公司开发的全双工同步串行总线,其接口由MISO(串行数据输入),MOSI(串行数据输出),SCK(串行移位时钟),SS/CS(从使能信号)四种信号构成(当然了,现在芯片技术日新月异,SPI 模块的结构也在变化中,象OMAP 系列中的SPI 模块还支持 5 线的一种模式),SS /CS决定了唯一的与主设备通信的从设备,主设备通过产生移位时钟来发起通讯。
通讯时,数据由MOSI 输出,MISO 输入,数据在时钟的上升或下降沿由MOSI 输出,在紧接着的下降或上升沿由MISO 读入,这样经过8/16 次时钟的改变,完成8/16 位数据的传输。
SPI 模块为了和外设进行数据交换,根据外设工作要求,其输出串行同步时钟极性(CPOL)和相位(CPHA)可以进行配置。
如果CPOL=0,串行同步时钟的空闲状态为低电平;如果CPOL=1,串行同步时钟的空闲状态为高电平。
如果CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样;如果CPHA=1,在串行同步时钟的第二个跳变沿(上升或下降)数据被采样。
2、LINUX驱动的分层与分离:在面向对象的程序设计中,可以为某一类相似的事物定义一个基类,而具体的事物可以继承这个基类中的函数。
Linux 内核中频繁使用到面向对象的设计思想。
在设备驱动方面,往往为同类的设备设计了一个框架,而框架中的核心层则实现了该设备通用的一些功能。
而且具体的设备不想使用核心层的函数,它可以重载之。
这就是我们所说的在驱动设计中的分层思想。
此外,在驱动的设计中,我们还会使用分离的思想。
如果一个设备的驱动和host 的驱动休戚相关,那么,这就意味着这个普通的设备如果用在不同的host 上,会采用n 个版本的驱动。
如果产品单一,也许感觉不到不使用分离思想来设计驱动的危害,但是我们想一下,这个世上被人们称道的多是什么?精品,艺术品!精品如何打造?注重细节,不只考虑单一需求!大家开发个东西不容易,怎么能随随便便就让它茫然众码矣呢,所以,何时何地,我们都要以打造精品的思想来要求自己,让自己的劳动力不浪费。
学院《嵌入式应用开发》课程标准课程代码适用专业物联网应用技术适用学制获取证书编制审核制定日期一、课程定位嵌入式、物联网俨然成为信息产业的趋势,不管从政府的大力支持,还是从产业变革来说,这股潮流已经势不可挡。
而嵌入式系统是这些产业技术中最核心的部分。
随着智能化的电子行业的迅猛发展,嵌入式行业更是凭借其“应用领域广、人才需求大、就业薪资高、行业前进好”等众多优势,成为当前最热门、最有发展前景的行业之一。
本课程按照企业工作过程典型工作任务,在培养学生专业技能的同时,注重培养学生与他人沟通以及团队合作的能力,树立学生的规范意识和软件产品质量观念,通过引导学生发现问题、分析问题、解决问题,培养学生的逻辑思维能力、实践能力和创新能力,提升学生职业发展竞争力。
本课程是物联网应用技术专业的一门专业核心课程,是一门理实一体化课程。
在第二学年的第四学期开设,共96课时。
前续课程是《程序设计基础》、《物联感知与终端技术》,后续课程《物联网应用开发》。
二、课程目标本课程培养目标是从嵌入式系统基础、ARM系列的先进技术、体系结构、指令集、程序设计出发,学生能够系统学习嵌入式系统开发基础和应用。
通过本课程从软硬件开发基础两个方面学习嵌入式系统的设计方法,熟练掌握嵌入式系统开发过程以及嵌入式系统的设计与实现。
学生学习完本课程,能够胜任嵌入式应用开发、测试和维护工作,具备以下能力:知识目标:1.能根据嵌入式开发平台体系结构,熟练搭建嵌入式开发环境;2.了解ARM体系结构,常用ARM处理器内部结构,掌握ARM处理技术;3.能够熟练掌握ARM系列处理器指令集,了解汇编语言程序设计方法;4.熟练使用基于ARM的嵌入式C语言程序设计基础和调试方法;5.能根据嵌入式软件程序设计流程,实现硬件/软件划分生成独立模块设计;6.按照设计要求完成相关的功能模块设计、编码、调试等能力;7.熟练掌握嵌入式应用程序调试技巧和方法,运用仿真器进行嵌入式应用系统调试。
S5pc100平台wifi模块驱动移植分析一、移植环境:1、主机:Ubuntu 10.10发行版2、目标机:FS_S5PC100平台3、交叉编译工具:arm-none-linux-gnueabi-4、wifi模块:marvell-86865、内核:linux-2.6.35---------------------------------------------------------------------二、在linux下的移植1. 平台代码修改内核驱动支持因为S5PC100平台上SDIO功能已经支持,所以只需要内核驱动支持marvell-8686即可。
由于wifi的接口种类有很多种,比如有usb接口wifi,串口接口wifi,sd卡接口wifi,sdio接口wifi,所以在移植wifi驱动时必须确保usb,串口,sd卡的驱动存在,取决于wifi 接口的类型。
S5pc100开发板上的wifi的接口是sdio接口的,所以在此之前必须移植号sdio 接口的驱动。
$ make menuconfig 修改:[*] Networking support --->[*] Wireless ---><*> cfg80211 - wireless configuration API{*} common routines for IEEE 802.11 driversDevice Drivers --->[*] Network device support --->Wireless LAN ---><*>Marvell 8xxx Libertas WLAN driver support<*> Marvell Libertas 8385/8686/8688 SDIO 802.11b/g cardsGeneric Driver Options --->(sd8686.bin sd8686_helper.bin) External firmware blobs to build into the kernel2. 内核的修改:wifi的移植依赖于网卡驱动的移植和nand-flash平台的支持,可以参考Linux-2.6.35内核移植—网卡驱动的移植和Linux-2.6.35内核移植——Nand flash 驱动的移植文件arch/arm/mach-s5pc100/mach-smdkc100.c下有内核的分区,把第2个分区改成8M。
因为生成的文件系统太大,大于4M。
修改如下(红色字体部分):static struct mtd_partition s5pc100_nand_part[] = {[0] = {.name = "bootloader",.size = SZ_1M,.offset = 0,},[1] = {.name = "kernel",.size = SZ_1M * 4,.offset = MTDPART_OFS_APPEND,},[2] = {.name = "rootfs",.size = SZ_8M,.offset = MTDPART_OFS_APPEND,},[3] = {.name = "usrfs",.offset = MTDPART_OFS_APPEND,.size = MTDPART_SIZ_FULL,},3. 固件的准备将固件sd8686.bin和sd8686_helper.bin拷贝到linux-2.6.35/firmware下。
编译时会自动编译进内核。
$ cp sd8686.bin linux-2.6.35/firmware/$ cp sd8686_helper.bin linux-2.6.35/firmware/$ make zImage$ sudo cp zImage /tftpboot由于wifi驱动在运行时需要两个工具,wpa_supplicant和wpa_cli,所以必须先制作这两个工具放到文件系统的bin目录下面。
三,文件系统的制作1. wpa_suppicant的移植源码版本选择:wpa_supplicant-0.7.3openssl-0.9.8e[ openssl移植]:a、补丁安装openssl源码编译需要打wpa_supplicant提供的补丁,我们选择的openssl版本为openssl-0.9.8e所以我们需要wpa_supplicant-0.7.3/patches/openssl-0.9.8e-tls-extensions.patch拷贝到openssl源码下。
$ cp wpa_supplicant-0.7.3/patches/openssl-0.9.8e-tls-extensions.patch openssl-0.9.8e/$ cd openssl-0.9.8e$ patch -p1 < openssl-0.9.8e-tls-extensions.patch注意:-p1,这里是数字“1”.b、配置编译安装$ ./Configure linux-elf-arm -DL_ENDIAN linux:'arm-cortex_a8-linux-gnueabi-gcc' shared --prefix=/home/linux/workdir/wifi/openssl打开openssl-0.9.8e中Makefile$ vim Makefile 修改如下:- CC= cc+ CC= arm-none-linux-gnueabi-- AR= ar $(ARFLAGS) r+ AR= arm-cortex_a8-linux-gnueabi-ar $(ARFLAGS) r- RANLIB= /usr/bin/ranlib+ RANLIB= arm-cortex_a8-linux-gnueabi-ranlib编译:$ make$ make install[ wpa_supplicant移植]:在/wpa_supplicant-0.7.3/wpa_supplicant目录下$ cd wpa_supplicant-0.7.3/wpa_supplicanta、Makefile修改$ vim Makefile修改#ifndef CCCC=gcc#endif为CC= arm-none-linux-gnueabi--gcc //自己的交叉编译工具链在CFLAGS += -I../srcCFLAGS += -I../src/utils下添加:CFLAGS += -I/home/linux/workdir/wifi/openssl/include//注意这是你自己安装wpa_supplicant 的路径下的include修改LIBS += -lssl为LIBS += -lssl -L/home/linux/workdir/wifi/openssl/lib/修改LIBS_p += -lcrypto为LIBS_p += -lcrypto -L/home/linux/workdir/wifi/openssl/lib/b、编译$ cp deconfig .config$ make此处可能出题以下问题:/usr/bin/ld: skipping incompatible /usr/local/ssl/lib/libssl.so when searching for -lssl/usr/bin/ld: skipping incompatible /usr/local/ssl/lib/libssl.a when searching for -lssl/usr/bin/ld: cannot find -lssl/usr/bin/ld: skipping incompatible /usr/local/ssl/lib/libcrypto.so when searching for -lcrypto/usr/bin/ld: skipping incompatible /usr/local/ssl/lib/libcrypto.a when searching for -lcrypto/usr/bin/ld: cannot find -lcryptocollect2: ld returned 1 exit statusmake: *** [wpa_supplicant] Error 1解决方法如下:方法1:可能你在修改wpa_supplicant-0.7.3/wpa_supplicant下Makefile的时候,将CC=gcc 直接改为CC=arm-cortex_a8-linux-gnueabi-gcc,而没有按上面方式去掉#ifndef CC和#endif 这两行。
方法2:需要先编译安装openssl库,确保两个编译都使用统一工具arm-cortex_a8-linux-gnueabi-gcc,这样只要把openssl和wpa_supplicant两个用同一个编译工具编译即可。
方法3:如果已经安装了openssl库,还出现如上问题,建议更新源,卸载后再装,如果有文件信赖关系不对,运行命令:sudo apt-get -f install.注:方法1,亲测可行。
方法2和3是我在移植的时候出现上面问题,在网上搜到的结果,好像不管用,在此帖出,以供参考。
最后,编译$ make后将生产的wpa_supplicant和wpa_cli拷贝到根文件系统的bin目录下$ cp wpa_supplicant /source/rootfs/bin$ cp wpa_cli /source/rootfs/bin2. 文件系统的制作至此,wifi的驱动工作已经完成。
但是想正常的利用wifi来链接网络,还需要配置wifi。
Wifi配置:$ cd 文件系统a. 在根文件中添加/etc/resolv.conf,域名解析。
$ vim /etc/resolv.conf内容为:# Generated by NetworkManagernameserver 192.168.1.1 //你自己的无线路由的DNSnameserver 8.8.8.8 //此行可不写b. 在根文件系统/etc下添加wpa_supplicant配置文件wpa_supplicant.conf$ vim /etc/wpa_supplicant.conf内容为:# WPA-PSK/TKIPctrl_interface=/var/run/wpa_supplicantnetwork={ssid="XXXX" #无线路由ssidkey_mgmt=WPA-PSKproto=WPApairwise=TKIPgroup=TKIPpsk="XXXXXXXX" #无线路由密码}c. 创建目录/var/run/wpa_supplicant$ mkdir /var/run/wpa_supplicant –p四,wifi模块的测试启动开发板完成如下操作:●配置无线网卡ip# ifconfig wlan0 192.168.1.200 # ifconfig -a●配置默认网关# route add default gw 192.168.1.1 ●启动wpa_supplicant连接无线网络# wpa_supplicant -B -iwlan0 -c /etc/wpa_supplicant.conf问题:wifi libertas: problem fetching packet from firmware解决:网上有好多解决方法,但都不适用我的情况,最后换了一个wifi模块,就好了。