在写内核驱动的时候,最好先在uboot上,进行裸板测试,验证寄存器,再移植到内核中,这样可以熟悉寄存器,也排除内核中的一些干扰。
/***********************************************************
* led.c
 * 53344中有16个GPIO,但是却不是在统一个GPIO寄存器中设置的,
* GPIO0-GPIO3是以CMIC开头的寄存器,
* GPIO4-GPIO16才是以GPIO开头的寄存器。
*********************************************************/
typedef volatile unsigned int U32; #define GPIO_INPUT *(U32 *)0x18000060
#define GPIO_OUT *(U32 *)0x18000064
#define GPIO_OUT_EN *(U32 *)0x18000068 #define CMIC_GP_DATA_IN *(U32 *)0x48002000
#define CMIC_GP_DATA_OUT *(U32 *)0x48002004
#define CMIC_GP_OUT_EN *(U32 *)0x48002008
#define CMIC_GP_INT_TYPE *(U32 *)0x4800200c void configure_output(int gpio);
void configure_input(int gpio);
void led_on(int gpio);
void led_off(int gpio);
void delay(void);
void delays(int count); int _start(void)
{
configure_output();
configure_output();
configure_output(); CMIC_GP_OUT_EN |= 0xf;
CMIC_GP_DATA_OUT &= ~0xf; while () {
led_on();
led_on();
led_on();
delay();
led_off();
led_off();
led_off();
delay();
} return ;
}
void configure_output(int gpio)
{
GPIO_OUT_EN |= ( << gpio);
} void configure_input(int gpio)
{
GPIO_OUT_EN &= ~( << gpio);
} void led_on(int gpio)
{
GPIO_OUT &= ~( << gpio);
} void led_off(int gpio)
{
GPIO_OUT |= ( << gpio);
} void delay(void)
{
__asm__ __volatile__ (
"ldr r0 , =0x4ffffff \n"
"delayloop: \n"
"subs r0 , r0 , #1 \n"
"bne delayloop \n"
:::"r0"
);
} void delays(int count)
{
__asm__ __volatile__ (
"mov r0 , %0 \n"
"delaysloop: \n"
"subs r0 , r0 , #1 \n"
"bne delaysloop \n"
::"r"(count)
:"r0"
);

Makefile, 链接脚本led.lds用于指定代码运行的位子

all:
arm-linux-gcc -c led.c -o led.o -fno-builtin
arm-linux-ld -T led.lds led.o -o led
arm-linux-objcopy -O binary led led.bin
clean:
rm -rf led led.bin *.o

链接脚本led.lds,用于指定代码运行的地址,以及编译的时候,如果有多个文件,每个文件存放在内存中的位置。

当一个文件的时候,上面中间一条,也可以直接写成如下的写法,用于指定起始地址。

arm-linux-ld  -T0x61000000  led.o  -o  led

链接脚本,生成方法

arm-linux-ld --verbose > led.lds

再根据实际修改生成的文件。

/* Script for -z combreloc: combine and sort reloc sections */
OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm",
"elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(_start)
SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib");
SECTIONS
{
. = 0x61000000 ;   /*  程序的起始地址 */ .text :
{
led.o(.text) ;
*(.text) ;
}
align = ;
}

将生成的led.bin下载到板中,然后

go 0x61000000

BCM_GPIO驱动测试的更多相关文章

  1. Win8驱动测试模式

    打开驱动测试模式(保存成bat文件,双击执行) bcdedit /set testsigning on pause 执行完成后,看见提示操作成功的提示,之后我们重启一下,再次进入系统,在桌面的右下角会 ...

  2. selenium+python(模块化驱动测试)

    模块化驱动测试,就是借鉴编程语言中模块化的思想,把重复的操作独立成功公告模块,懂用例执行过程中需要用到这一模块操作时则被调用,这样可以极大的消除重复从而提高测试用例的可维护性 下面具体以126邮箱为例 ...

  3. linux驱动开发之九鼎板载蜂鸣器驱动测试【转】

    本文转载自:http://whylinux.blog.51cto.com/10900429/1932491 字符设备驱动用的fileopretion结构体. 1.板载蜂鸣器的驱动测试 我手里有一个BS ...

  4. DevOps on DevCloud|如何实现应用接口的混合驱动测试

    引言:在"DevOps能力之屋(Capabilities House of DevOps)"中,华为云DevCloud提出(工程方法+最佳实践+生态)×工具平台=DevOps能力. ...

  5. Selenium(十四):自动化测试模型介绍、模块化驱动测试案例、数据驱动测试案例

    1. 自动化测试模型介绍 随着自动化测试技术的发展,演化为了集中模型:线性测试.模块化驱动测试.数据驱动测试和关键字驱动测试. 下面分别介绍这几种自动化测试模型的特点. 1.1 线性测试 通过录制或编 ...

  6. 流程及迭代驱动测试管理软件, itest 发布到开源中国

    itest 源码已发布到码云 ,项目已被开源中国收录!详见  https://www.oschina.net/p/itest-cn 测试人自己开发,汇聚10年沉淀,独创流程驱动测试.度量展现测试人价值 ...

  7. web自动化测试-模块驱动测试实例和数据驱动测试实例

    一.模块驱动测试实例 把登录和退出统一封装在login类中,若把login类单独放在一个文件中,就可以给任一测试脚本调用,这里就跟测试脚本放一起 from selenium import webdri ...

  8. 自动化测试架构设计 &&自动化持续集成测试任务实战[线性测试、模块驱动测试、数据驱动测试、关键字驱动测试]

    1 为什么设计自动化测试架构 1.1 企业现状分析 压力大:产品需求不明确,上线时间确定,压力山大. 混乱:未立项,开发时间已过半,前期无控制,后期无保障. 疲于应付:开发人员交付的文件质量差,测试跟 ...

  9. Kiwi iOS驱动测试开发

    Kiwi是iOS开发一个行为驱动开发库.目标是提供一个BDD库,精美的简单安装和使用. 安装 使用CocoaPods安装: pod 'Kiwi'如果使用Xcode5则使用: pod 'Kiwi/XCT ...

随机推荐

  1. 图解IIS配置过程

    环境介绍: 操作系统:win7,64位.IIS7 开发软件:VS2010,32位 图解IIS配置过程: 此过程之前确保已安装了IIS. 1.在"控制面板"中找到"管理工具 ...

  2. Yii2 mongodb 扩展的where的条件加入大于小于号浅析(转)

    1. mongodb的where中有比较丰富的 条件,如下: static $builders = [ 'NOT' => 'buildNotCondition', 'AND' => 'bu ...

  3. java的IO总结(一)

    Java的IO流是实现输入输出的基础,这里所说的流就是数据流,大部分的与流相关的类放在Java.io包下. 一,Java的流分类 按照不同的分类方式可以把流分成不同的类型,下面我们从不同的角度对流进行 ...

  4. go系列之数组

    数组 数组是同一类型元素的集合.例如,整数集合 5,8,9,79,76 形成一个数组.Go 语言中不允许混合不同类型的元素,例如包含字符串和整数的数组.(译者注:当然,如果是 interface{} ...

  5. Spring AOP之Introduction(@DeclareParents)简介(转)

    Spring的文档上对Introduction这个概念和相关的注解@DeclareParents作了如下介绍: Introductions (known as inter-type declarati ...

  6. MySQL Study之--MySQL下图形工具的使用(MySQL Administrator)

    MySQL Study之--MySQL下图形工具的使用(MySQL Administrator) 系统环境:     操作系统: Windows  7(64) 下载地址:http://www.soft ...

  7. selenium+phantomJS爬虫,适用于登陆限制强,点触验证码等一些场景

    selenium是非常出名的自己主动化測试工具,多数场景是測试project师用来做自己主动化測试,可是相同selenium能够作为基本上模拟浏览器的工具,去爬取一些基于http request不能或 ...

  8. 创建C3P0数据源

    [Author]: kwu 创建C3P0数据源,实际开发中直接用JDBC连接数据库是非常少的.一般使用数据源的形式,C3P0是开源的数据源,实际项目用得非常多: 1.添加maven的支持 <de ...

  9. IE下JS读取xml文件示例代码

    JS读取xml文件具体步骤为:创建DOM对象.加载xml文件(仅适用于IE)附示例代码,感兴趣的朋友可以参考下,希望对大家有所帮助使用javascript脚本读取xml文件,这里暂只考虑IE浏览器st ...

  10. Python 计算两个IP段之间的有效IP地址

    Can anyone think of an algorithm to put all of the addresses between two others and put them in a li ...