在写内核驱动的时候,最好先在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. elk中文教程

    https://kibana.logstash.es/content/elasticsearch/monitor/logging.html ELK 实战之Elasticsearch ELK 地址:ht ...

  2. 【转】Ubuntu VI基本用法

    转自:http://blog.sina.com.cn/s/blog_4f3b79d0010166ai.html 1.vi的基本概念 基本上vi可以分为三种状态,分别是命令模式(command mode ...

  3. Windows上怎么安装ELK

    In this guide I will show that it is also possible to run Logstash on a Windows Server 2012 machine ...

  4. Spring里的FactoryBean和BeanFactory有啥区别?

    分别看这俩文章就知道了 Spring的FactoryBean使用 Spring加载xml配置文件的方式 ApplicationContext

  5. jQuery.ajax() 如何设置 Headers 中的 Accept 内容

    其实很简单,首先如果是常见类型,则请直接设置 dataType 属性 $.ajax({ dataType: "json", type: "get", succe ...

  6. SourceInsight-显示文件完整路径

    使用Source insight的时候想看文件的全路径,但是默认的是中间省略的路径,所以可以通过: 1.Options-->Preferences-->Display 设置Trim lon ...

  7. brendangregg

    http://www.slideshare.net/brendangregg/presentations http://techblog.netflix.com/2015/07/java-in-fla ...

  8. Xcode真机调试iOS10中Nslog 打印不出东西

    Xcode真机调试iOS10中Nslog 打印不出东西 解决方案 通过以下途径找到 Product->Scheme->EditScheme ios9以前的 如果不加 1 的那句 在xcod ...

  9. encoding/path可能引起无数奇怪的问题

    例如如下代码: <%@ page language="java" contentType="text/html; charset=UTF-8" pageE ...

  10. HTML源文件编码的问题

    刚才使用sublime text编辑html文件,在html中使用meta tag指定了charset,如下 <meta http-equiv="content-type" ...