- 博客(56)
- 资源 (5)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 强化C语言的指针类型学习
由于工作需要,要把uboot中的pci扫描代码移植到自己的项目里来,本来都做好了,但是需要稍微修改下uboot里的几个专门为我们的项目使用的文件,也就是uboot导出的函数,供项目使用,但是被告知,目前uboot已经是发布的版本,不能再改变了。怎么办呢?其实pci系统在uboot起来的时候已经初始化好了,在代码中需要的是其中一些变量的地址,有了这些地址,转换成合适的指针,那么就可以进行操作
2011-11-25 11:37:59
1038
原创 RTC杂谈
这两天看RTC部分。平台为MIPS的JZ4770平台。主要考察RTC对于机器关机,重启等部分的控制。关机操作:先sync文件系统,接着PMU的外设部分断电,接着进行设置RTC使CPU进入Hibernate Mode.这里要注意的是,RTC被集成到CPU内部,当然也有很多电路的RTC部门是外置的。rtc的供电部分不受PMU的控制。也就是说PMU掉电的情况下,RTC也可以正常工作。
2013-04-02 11:02:54
1541
1
原创 OSS音频编程实例
虽说现在较新的kernel都支持ALSA了,但是我认为OSS编程是比较容易上手的,因为比较符合Linux的编程的框架。再说ALSA配置的时候也可以选择OSS支持,这样OSS应用程序无需更改就可以使用ALSA驱动。关于录音和放音的ADC/DAC的控制设备节点为/dev/dsp, 音量调整的设备节点为/dev/mixer。从/dev/dsp读取的过程是录音,向/dev/dsp写入的过程
2013-03-28 14:48:10
3051
原创 Android 480DP屏幕使状态栏始终显示
糖果G-2的平板电脑产品使用的屏幕分辨率为800x480,在7inch的平板电脑上来讲,分辨率是相当低的。在Android 4.0的策略中,短边低于600dp的产品,status bar可以进行隐藏,比如打开图库等全屏应用的时候,status bar消失不见。这个时候如果想看到status bar,则要用手指快速从屏幕底部向上滑动。status bar出现后会覆盖原来app的内容。本来这是谷歌
2013-03-07 14:35:50
3111
原创 gcc版本问题导致Ubuntu12.04安装virtualbox失败
前阵子将Ubuntu升级到了12.04,原来装得virtualbox也可以正常使用。后来几次内核升级之后,virtualbox突然不能用了。virtualbox提示进行/etc/init.d/vboxdrv setup进行此操作后,系统直接死机。提示VBoxPciLinuxInit +0x10.。。。。看提示 应该是模块问题。但是网上还真的很少有这个问题。大多是提示缺少内核头文件。
2013-02-02 16:44:00
1865
原创 解决不使用Android NDK编译的bin文件No such file or directory问题
使用板子的交叉编译工具链,自己做Makefile来编译一个二进制文件,adb push到板子上运行。会出现No such file or directory问题。明明该文件是存在的,为什么会出现这个问题呢?文件是存在,但是该文件所需要的一些库文件,是不存在的。这个时候就需要静态链接。在Makefile中增加一行LDFLAGS += --static在编译可执行文件的命令中
2013-01-17 16:04:42
4361
原创 君正JZ4770 bootloader中对nand 进行分区
Android系统有好几个分区。system, data, flash等以下是jz4770平台上某款设备的分区信息/dev/block/mmcblk0p1 /system ext4 rw,relatime,user_xattr,barrier=1,data=ordered 0 0/dev/block/mmcblk0p2 /data ext4 rw,nosuid,nodev,relati
2013-01-04 18:46:32
2472
原创 Linux使用静态库
以下一个简单的小例子来学习如何使用静态库hello.c hello.h main.c Makefile总共4个文件,逐一来看hello.h#ifndef _HELLO_H#define _HELLO_Hextern int test(void);#endifhello.c#include int test(void){print
2012-11-12 15:39:09
828
原创 Android设备连接豌豆荚等显示的设备名
最近打算用JZ4770方案来做我们自己的产品。君正给的代码,是基于给艾诺定制的。每次用豌豆荚,或者QQ电脑管家连接设备的时候,总是显示“艾诺 Novo7 Basic”。很明显要改为我们自己的产品型号。目前只是用作开发板,后期要设计自己的板子。 本来以为这个字符串“Novo7 Basic”是通过“设置>关于平板电脑>型号”获取的,但是通过修改xx.mk(xx代表板子类型)中的PRO
2012-11-08 10:10:07
3403
2
原创 MIPS平台suspend/resume时GPIO状态控制
这两天在调一款触摸屏的驱动,在调试过程中发现,在休眠的时候,所用到的几个GPIO引脚的状态会自动变为低电平,在唤醒后又会回到高电平。但是在代码里并没有显式地去拉低/拉高。很明显这不是我们想要的,如果这样的话,GPIO的状态都无法自己控制,还怎么调呢? 问了下板子的FAE,GPIO的状态在休眠时,是预定义的。代码在arch/mips/jz4770/boards/gps1/gp
2012-10-31 11:41:44
2835
原创 不要在头文件中定义变量
在写C代码的时候,经常需要在头文件中包含有些预定义的信息。比如一些结构体的声明,外部变量,函数的声明等。有时候觉得有必要在头文件中定义一些变量,这样在源文件中就不需要定义了。但是这样做,有很大的问题。比如//test.h 1 #ifndef _TEST_H 2 #define _TEST_H 3 int x; 4 const char *name = "hhcn";
2012-10-23 14:59:12
10264
4
原创 MIPS busybox
编译一个MIPS平台的busybox,老是编译不过去。从出错信息看是MIPS编译器问题。ftp://ftp.ingenic.cn/3sw/01linux/00toolchain/mipseltools-gcc412-glibc261.tar.bz2下载最新的 busybox-1.20.2源码然后make menuconfig配置编译器路径和静态编译。就可以了。另外,如果
2012-10-18 17:22:31
2373
原创 Ubuntu中配置多个JDK
在已经安装好多个JDK之后,想要切换的时候,只需要修改~/.bashrc中的 JAVA_HOME环境变量如 93 #export JAVA_HOME=/usr/lib/jvm/jdk1.6.0_29 94 export JAVA_HOME=/usr/lib/jvm/java-6-openjdk 95 export CLASSPATH=$JAVA_HOME/lib:$CLAS
2012-10-17 14:25:02
2270
原创 OMAP4平台CPU频率调节机制浅析
最近在看CPU如何动态调节频率的相关部分。系统会根据当前负载,以及温度情况来调节cpu的频率,以满足系统需求和省电。cpu内部有温度传感器,当温度升高和降低到一定程度,都会出发中断,以此来调节频率(温度升高后,进行降频,温度降低后,如果系统仍需要更高频率,则把频率调高)。另外,系统会根据当前负载,进行调频。这个优先级比温度稍微低些,因为温度方面是通过中断来控制的。 首先,需
2012-09-24 11:58:24
2166
转载 linux权限
1. 更改用户ID和组ID1.1. 设置用户ID和设置组ID与进程相关联的ID有6个或更多,如下: 实际用户ID我们实际上是谁实际组ID有效用户ID用于文件访问权限检查有效组ID附加组ID保存的设置用
2012-09-13 11:34:04
737
原创 解决bq2416x休眠后USB充不进电
前两天,我的机器一直可以进行USB充电,而且都充满了。就没太在意USB充电的问题。但是最近,经常发现USB充不了电。于是用cat /proc/driver/deb2416x看一下寄存器配置,果然发现负责USB充电电流的寄存器2的值不对。但是一直没找到哪个地方能设置这个值,因为这个值在模块初始化的时候会进行设置,之后代码里没有任何地方操作该寄存器。 问了下老大,他说应该是看门
2012-08-31 16:55:20
2627
3
原创 触摸屏驱动问题导致omap i2c timeout
Ten4上使用了新的触摸屏novatek,中文名字叫做联咏科技吧。但是从一开始研发就有个问题,就是开机后,触摸屏无法使用,只有重启才行。 本来以为是手焊板子的问题。可是后来小批也有此问题。看来不得不解决了。 起初,怀疑触摸屏驱动有问题,但是对照其他触摸屏驱动,i2c操作部分没有什么区别。但就是一直报omap i2c timeout 。网上搜了一
2012-08-31 09:28:43
3473
转载 Debug Android and Linux suspend and resume (中文)
攒了一些关于调试Android和Linux下面的suspend 和 resume的经验, 在这里和大家分享一下。希望可以有些帮助, (下面没有写Android专用的, 就是Linux通用的)。1. no_console_suspend 在kernel启动参数里面加上no_console_suspend, 这个是最基本的, 因为kernel在把console suspend掉
2012-08-16 17:10:39
1946
转载 Android布局属性详解
android:id 为控件指定相应的IDandroid:text 指定控件的文本,置尽量使用strings.xmlandroid:grivity 指定控件的基本位置 ,比如举重,居右,android:padding 指定控件的内边距,控件当中的内容android:singleLine
2012-08-10 14:57:50
1494
原创 Android中如何让控件居中
测试部报告锁屏界面里,设置锁屏的那个控件位置不好,有点偏下。以至于设置的时候,图标都在界外了。 打开packages/app/Settings里的res/layout-sw720dp/lockscreen_targets.xml 对于横屏和竖屏两种情况,其实应该定义两个目录一种叫做land,另一种叫做port(都是缩写),分别对应横屏和竖屏。
2012-08-10 14:56:09
8622
原创 Android中为通知栏添加滚动条
将系统升级到4.1,发现右下角通知栏里面的滚动条没有了。如果里面栏目少的话,还可以接受,但是现在栏目多了,添加了蓝牙,GPS等,以至于上面的title直接顶到界面的最上面去了。这是无法接受的。 原来的4.0是有滚动条的,不确定是4.1里面去掉了,还是在同步代码的时候出了问题。总之,要把滚动条加上。 对于上层,特别是界面的东西一直以来都很犯怵,这次也是
2012-08-06 09:02:22
2661
原创 Android普通应用程序使用system权限
Android 在标准Linux系统上扩展了很多用户。在Android 4.1中,定义这些用户的文件为system/core/include/private/android_filesystem_config.h在这里也就直接粘贴过来吧#define AID_ROOT 0 /* traditional unix root user */#def
2012-07-26 16:44:53
6995
原创 android 4.1 强制使用720dp的布局
机器升级为android 4.1,10寸的平板跟以前的布局没有什么两样,但是7寸的就出了点问题。 谷歌Nexus 7也是7寸,默认使用的layout跟手机有些相似,但不全是手机布局。Nexus 7是1280 x 800,DPI 为213,这样经过计算,宽度换算为DP就是800 * 160 / 213 = 600; 4.1中对于600 ~ 719 dp的分辨率使用一种新的
2012-07-26 15:54:43
4630
4
转载 2.6 内核中的计时器和列表
在 Linux 内核中,时间由一个名为 jiffies 的全局变量衡量,该变量标识系统启动以来经过的滴答数。在最低的级别上,计算滴答数的方式取决于正在运行的特定硬件平台;但是,滴答计数通常在一次中断期间仍然继续进行。滴答速率(jiffies 的最不重要的位)可以配置,但在最近针对 x86 的 2.6 内核中,一次滴答等于 4ms(250Hz)。jiffies 全局变量在内核中广泛使用,目的有几个,
2012-07-11 11:33:14
890
原创 wpa_supplicant, wpa_cli用法
Android系统中对于WIFI的设置集成到了“设置”中,其实跟手动设置差不多。这里介绍下如何手动连接WIFI,以方便以后调试WIFI。 第一步要做的就是要加载WIFI模块驱动了。当然如果你的WIFI是编译到内核里面的,就不需要的。我们的WIFI芯片用的是BCM4330,编译为模块。insmod /system/lib/modules/kernel/drivers/net/w
2012-07-05 16:43:16
37588
6
原创 Android系统插入OTG后不休眠
这两天一直忙着搞插入OTG死机的问题。有时候机器上面插入个U盘,鼠标,或者硬盘,如果这个时候没有接充电器的话,有很大的概率机器直接死机了,而且必须插入充电器才能开机。实测电池电压基本为0,原来是电池过流保护了。由于采购的电池保护点过低(1.5A的时候就挂了),只能想办法把输出电流降到最低了,尝试过很多方法,调低背光亮度可以有效解决在正常使用中死机,但是插入OTG死机的问题一直没有得到解决。
2012-07-03 19:18:45
5411
3
原创 OMAP4平台设置时钟频率
新到了一个硬件,需要16.667Mhz的时钟频率。目前不想加外置电路,尽量把成本降到最低。采用配置时钟的方式,可以分频得到想要的时钟。 FREF_CLK1_OUT/GPIO_181/SAFE_MODE 这个引脚是复用的,设为MODE0可以作为时钟源,只需要配置相应的寄存器,就可以完成,这里不再赘述。 硬件上决定了该时钟源受auxclk1控制,现在的工作就是配置a
2012-06-28 14:42:13
2040
原创 Android中休眠与唤醒之wake_lock, early_suspend, late_resume
最近研究如何让Android不休眠。听组里人说,机器在充电的时候不休眠。我试了一下,确实是,串口可以使用(CONFIG_PM_DEBUG并没有打开)。这个时候,LCD显示屏是休眠了,触摸屏也休眠了,其他的比如重力传感器等就没有看了,但是标准的Linux系统并没有进入休眠。看了网上好多关于Android系统的休眠与唤醒例子,感觉有些懵懵懂懂的。于是,还是看内核代码吧。 An
2012-05-28 19:49:20
11296
2
原创 TWL6030 电源管理芯片中断注册,处理过程
TI TWL6030 是一款功能强大的电源管理芯片。集成了很多功能,可以对整个板卡上的各设备进行供电和电源管理,功能大致和PC上的电源类似,就是一端插上电源,另一端分出来好多电源线,分别给处理器,内存,硬盘等供电。只不过有了电源管理芯片,各个电压可以配置。本文主要讲TWL6030上各设备中断处理过程。为什么用这个来讲,主要是它很特殊,我们知道,普通的设备只有一根中断线接到
2012-05-10 20:23:03
3228
原创 unsigned signed类型区分很重要
也许,我们写起代码来随手就是定义一个int 或者char型的数据。我们有没有想过这个数据到底是有符号还是无符号呢,它到底需要一个符号吗,会溢出吗?比如最简单的两行代码char ch = 0x90;printf("%02x", ch);你期待什么输出结果, 是90吗?但是结果可能不是你想的得出结果是ffffff90,到底是为什么呢?char型在我的平台上默认是sign
2012-02-10 17:29:07
1183
1
原创 大小端编程注意事项
一般情况下,我们所遇到的都是小端的情况,典型的X86处理器就是小端的。但是,好多powerpc处理器可以被配置为大端模式,也可以被配置为小端模式。所以,经常会出现以前的代码运行的好好地,到了新板子,或者板子配置发生了变化,结果就不对了,而且很难调试。因为根本不会认为它出错。下面就举个我们代码中调了好久才发现的问题。又一个函数:i2c_write(..., unsigned ch
2012-01-31 16:46:45
980
转载 深入理解指针函数
1.指针函数的定义 顾名思义,指针函数即返回指针的函数。其一般定义形式如下: 类型名 *函数名(函数参数表列); 其中,后缀运算符括号“()”表示这是一个函数,其前缀运算符星号“*”表示此函数为指针型函数,其函数值为指针,即它带回来的值的类型为指针,当调用这个函数后,将得到一个“指向返回值为…的指针(地址),“类型名”表示函数返回的指针指向的类型”。
2012-01-10 15:27:12
488
转载 深入理解typedef
typedef作为类型定义关键字,用于在原有数据类型(包括基本类型、构造类型和指针等)的基础上,由用户自定义新的类型名称。 在编程中使用typedef的好处,除了为变量取一个简单易记且意义明确的新名称之外,还可以简化一些比较复杂的类型声明。比如: typedef int INT32;将INT32定义为与int具有相同意义的名字,这样类型INT32就可用
2012-01-10 15:26:11
568
原创 两个常用的预编译宏
在C语言中,提供了两个预编译宏#define #undef#define大家应该很常用,或许#undef也用过吧。今天要讲的是在项目中遇到的些小问题。以前的代码是为某一种板子写的,现在有了新的板子。所以既要支持新板子,又要保持向老的板子兼容。但是两种板子的资源不同啊,举个简单的例子。两个板子上都有一个I2C MUX (pca9545)但是,两个I2C 地址却不同。
2011-12-27 10:48:38
1179
1
原创 Freescale P4080 I2C 驱动分析
Freescale P4080是一款8核心网络处理器,功能强大,外设齐全,基于powerpc e500 core。在嵌入式网络应用上被广泛使用。今天只讨论P4080的I2C部分。P4080片上集成了4个I2C 控制器,在我们的应用中,这4个I2C Controller 都是作为master来使用。先来一张I2C 控制器的结构图这张图描述了一I2C 控制器应该有的寄存器,描述了各
2011-11-24 11:16:09
3035
原创 弄懂dup2函数
好长一段时间,都没弄明白dup2(int oldfd, int newfd), 到底是从哪里复制到哪里,主要是《unix环境高级编程》一书翻译的太差,因为对我形成了长期的误导!以至于后来用到管道的时候还时有迷惑,现在终于弄清楚了,因为要记下来,有不对的地方,还请各位好友不吝赐教。int dup2(int oldfd, int newfd);这个是该函数的原型:复制一个文件描述符
2011-10-25 11:46:29
1556
原创 C语言函数内部改变指针本身
今天发一个C语言基础的小知识点:C语言中函数参数传递方式只有一种:值传递。 可能大家在刚开始学习C的时候都被一些教材误导,认为C中有值传递和地址传递两种方式。其实只有值传递一种,无论函数以什么形式进行传递,其实传递的都只是参数的一份拷贝! 举个简单的例子,一个改变某个整型变量参数的函数int change_value(int *pChange, int val){
2011-06-14 17:06:00
9693
6
转载 理解“统一编址与独立编址、I/O端口与I/O内存”
理解“统一编址与独立编址、I/O端口与I/O内存” 引言: 从CPU连出来一把线:数据总线、地址总线、控制总线,这把线上挂着N个接口,有相同的,有不同的,名字叫做存储器接口、中断控制接口、DMA接口、并行接口、串行接口、AD接口……一个设备要想接入,就用自己的接口和总线上的某个匹配接口对接……于是总线上出现了各种设备:内
2011-06-13 16:56:00
1100
原创 Freescale MPC85XX系列BSP各设备注册浅析
这几天项目不太忙,于是抽空看了一下关于BSP相关的东西,记下来跟大家分享一下。我们公司用的产品主要是freescale公司的powerpc系列,期中MPC8548,MPC8572用的比较多。由于要给老外做整个板卡上硬件的测试工作,所以对于板上资源是必须要了解的。本篇文章的侧重点在于板上各设备是如何注册的(只讲设备注册,不讲驱动注册),而对于板上有哪些资源,datasheet上都写得明明白白,在
2011-06-08 15:21:00
1577
原创 Freescale MPC85XX系列BSP各设备注册浅析
这几天项目不太忙,于是抽空看了一下关于BSP相关的东西,记下来跟大家分享一下。我们公司用的产品主要是freescale公司的powerpc系列,期中MPC8548,MPC8572用的比较多。由于要给老外做整个板卡上硬件的测试工作,所以对于板上资源是必须要了解的。本篇文章的侧重点在于板上各设备是如何注册的(只讲设备注册,不讲驱动注册),而对于板上有哪些资源,datasheet上都写得明明白白,在
2011-06-08 15:21:00
1790
2
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人