- 博客(55)
- 收藏
- 关注
原创 一个关于USB Interface的例子
今天帮ML里的哥们试一个configfs的问题, 又重新认识了一下USB interface。原来,一个function可以有多个interface的,以前一直认为只有一个。看下面的cat /sys/kernel/debug/usb/devices 输出。T: Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 3 Spd=480 MxCh=
2016-06-14 16:11:45
12642
原创 两种禁止USB autosuspend的方法
在有些情况下,由于低功耗情况下,USB硬件的bug或者提高USB resume的速度,我们需要禁止USB的autosuspend,下面是两种方法。1: 在bootloader的bootargs里加上“usbcore.autosuspend=-1”2: 文件系统起来后,运行如下命令,disable掉runtime pmfor i in $(find /sys-name con
2016-03-04 14:19:45
13204
原创 USB Type-C 设计
最近USB Type-C用在了越来越多的产品上,而且也有客户开始导入Type-C的设计了,所有研究了一下USBType-C的设计和规范,下面谈的不保证对,仅是我的一些理解,用于指导我的工作。 一些名词:DFP: DownstreamFacing Port (通常指 USB Host)UFP: UpstreamFacing Port (通常指 USB Device)
2015-12-11 17:46:53
2819
原创 Linux Linker 的顺序
今天发现initramfs的产生比driver的加载早,感觉有点奇怪,仔细看了一下。1.init/initramfs.crootfs_initcall(populate_rootfs);2.include/linux/init.h#define pure_initcall(fn) __define_initcall(fn, 0
2015-11-05 16:49:01
684
转载 Open-Drain与Push-Pull
【Open-Drain与Push-Pull】GPIO的功能,简单说就是可以根据自己的需要去配置为输入或输出。(General Purpose Input Output,简称为GPIO或总线扩展器,利用工业标准I2C、SMBus™或SPI™接口简化了I/O口的扩展。当微控制器或芯片组没有足够的I/O端口,或当系统需要采用远端串行通信或控制时,GPIO产品能够提供额外的控制和监视功能。)但是在配置
2012-11-17 16:00:55
848
转载 LDO和DC-DC器件的区别
DCDC的意思是直流变(到)直流(不同直流电源值的转换),只要符合这个定义都可以叫DCDC转换器,包括LDO。但是一般的说法是把直流变(到)直流由开关方式实现的器件叫DCDC。 LDO 是低压降的意思,这有一段说明:低压降(LDO)线性稳压器的成本低,噪音低,静态电流小,这些是它的突出优点。它需要的外接元件也很少,通常只需要一两 个旁路电容。新的LDO线性稳压器可达到以下指标:输出噪声
2012-11-17 15:40:51
515
原创 在没有打印以及ICE无法连接的情况下,如何知道kernel hang的位置
前提是reset板子不会照成memory被reset方法一(已测试):1. 打开你的System.map文件,找到symbol: __log_buf比如:806d6f88 b __log_buf这里的地址0x806d6f88是虚拟地址,不过是和物理地址一一对应的,一般双方只差一个最高4位的偏移。本例中__log_buf的物理地址是0x106d6f882. boo
2012-11-02 17:04:36
778
原创 Linux下timer延时的使用
因笔者工作在嵌入式平台上(非x386),下面给出的结论仅在arm平台上测试过。1. 在原子上下文,延迟应该少于100微秒。使用udelay2. 在非原子上下文延迟的使用0-100us: 使用udelay100us以上: 使用usleep_range20ms以上且不要求精确: 使用msleepmsleep不精确,完全可以用usleep_range代替。
2012-10-19 16:24:08
8223
2
原创 为什么USB Audio会产生jitter或数据丢失
1. Host太繁忙,导致Host USB的数据包未来得及在指定时间(比如1ms)送到USB buffer处。2. Device端的USB(PHY)和audio clock(I2S, LRCLK)的clock无法精确同步,比如full speed的usb的clock为12M, 当audio的采样率为44.1khz时,USB的clock就无法整除Audio的clock, 这样USB就无法
2012-08-14 17:22:42
3154
原创 USB数据包的格式是小端的(little-endian)
ARM是小端的,所以字节顺序无需调整。不过,为了程序的可移植性,可以用cpu_to_le16将数据转化为小端的如果在大端的平台上(如PowerPC)
2012-08-10 13:26:09
2189
原创 __raw_writel, writel_relaxed 和 writel的区别
因为对别的平台不了解,下面仅谈它们在ARM上的区别__raw_writel: 因为有volatile关键字, 所以编译器不会打乱多个__raw_writel的执行顺序。对于ARM而言,当多个写以代码的顺序到达相同设备时,执行的顺序也是被保证的,不过对于不同的设备,执行的顺序就不被保证了。write_relaxed: 在ARM平台上与__raw_writel一样,因为
2012-07-22 08:50:14
11936
1
原创 Linux内核中USB充电器的解决方案
当前最新的内核(v3.5)对USB充电器的整体方案支持的不是太好,这里讨论的USB充电器的方案仅指软件方案,即充电器的检测需要由软件干预(比如读取USB PHY的寄存器), 同时电池的充电值根据充电器的不同类型,需要由软件来设置。 硬件检测充电器及硬件自动选择充电电流不在此讨论之列。软件的方案的好处是: 可以省去一个USB充电器的检测芯片以及使用更简单(便宜)的电池管理芯片,
2012-06-26 09:30:15
3432
转载 How do I erase my disk
Use the "shred" command:Suppose I want to erase all the data on my hard disk, then I boot using a LiveCD like Knoppix and open a shell and type the following command:shred -vfz -n 10 /dev/hdaHe
2012-06-18 21:18:14
661
原创 How to submit a patch to upsream
//git format patchgit format-patch --subject-prefix="U-Boot][PATCH Vx" --stat -p -n -git format-patch --subject-prefix="PATCH v2" --cover-letter --stat -p -n10git format-patch -M (rename file)
2012-01-03 11:50:25
652
原创 My Kernel patch
http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux-2.6.git&a=search&h=refs%2Fheads%2Fmaster&st=author&s=Peter+Chen
2011-02-18 10:24:00
566
原创 根文件系统是如何挂载的?
1. 创建虚拟文件系统(在ram中)。 fn: vfs_caches_init2. 根据u-boot bootargs的参数得到的设备名,比如/dev/mmcblk0p1到block class去找到主次设备号。fn: name_to_dev_t3. 挂载block设备上的分区到根文件系统。fn:prepare_namespace
2011-02-17 15:06:00
523
原创 oprofile的使用方法
1. opcontrol --init2. opcontrol --no-vmlinux”3. opcontrol --start”4. ./your_app5. opcontrol --dump"6. opcontrol --stop "7. opreport -l ./your_app 在内核的编译选项了要选择oprofile, 同时要有oprofile的应用程
2010-04-16 09:22:00
110
原创 udev建立设备节点的规则
1. 设备要在下面任一一组目录下/sys/subsystem/devices/sys/bus/devices, /sys/class/, /sys/block 2. 上面这些目录下面的设备目录里要有uevent子项, 当用户程序向uevent里写入add, kernel就会得到这个add事件,kernel将add事件发给udevd, udevd就会建立对应的设备节点.
2010-04-08 11:13:00
1158
原创 内核启动的一些总结
1. arm linux boot flowmap_io is called very early, which is at paging_init the kernel_init will not go on running until kthreadd has created(complete(&kthreadd_done))__define_initcall is calle
2010-04-08 11:05:00
446
原创 一些硬件常识
1. 有关reset controller和clock enable的顺序问题异步设备(大多数设备): 先reset controller, 再clock enable同步设备: 先clock enable, 再reset controller
2010-04-08 11:01:00
478
原创 ARM Linux相关
1. The page table at Arm LinuxIt is the New ARMv6 page table, with The Not-Global (nG) bit, The Shared (S) bit, The Execute-Never (XN) bit,Three access permission bits.The L1 base address is read
2010-04-08 10:52:00
584
原创 Linux的内存管理的一些总结
1. kmalloc:在arm平台上, kmalloc是以cache line的字节数对齐的,比如cortex A8, A15是64bytes 对齐,而cortex A9则是32bytes 对齐。2. 如何知道系统中可用的memorythe free memory is MemFree + Buffers + Cached + SwapFree3. 内存分配
2010-04-08 10:47:00
811
原创 一些GCC的宏
1. — Built-in Function: int __builtin_constant_p (exp) You can use the built-in function __builtin_constant_p to determine if a value is known to be constant at compile-time and hence that GCC ca
2010-04-08 10:44:00
206
原创 一些wince的小知识
struct kdata: saved at 0xffffc800, which stored the current kernel information
2010-03-22 17:28:00
391
原创 matrix键盘工作驱动基本思路
以4*3键盘为例: 4个gpio为output, 3个gpio为input. 开始时,4个output的gpio也为input状态. 当扫描开始时(当有键按下,触发中断),将output的某个gpio设为1,然后起一个定时器(40-50us)接着去扫描3个input的gpio.这样如果没有键按下时,这一列的三个键均为1如果有键按下,则对应gpio的值为1(跟具体硬件有关).
2010-03-18 11:15:00
1249
原创 如何让sudo不需要输入密码就执行
sudo visudo编辑文件,如下所示: # /etc/sudoers## This file MUST be edited with the visudo command as root.## See the man page for details on how to write a sudoers file.#Defaults en
2010-03-18 10:28:00
773
原创 对内核高精度timer体系的一些分析
因为在vim下输入英文比较方便, 所以一般初稿都是用英文写的.下面的分析是基于最新的内核(2.6.33)的.there is not included at current platform commented #在kernel的time目录里,会根据不同的编译选项来选择不同的tick模式,一般为以下模式(arm)带#为没有编译进内核的.obn-$(CONFIG_GEN
2010-03-17 15:41:00
2372
原创 Android 常用技巧
1. how to running emulator:./emulator -image lib/images/system.img -ramdisk lib/images/ramdisk.img -initdata lib/images/userdata.img -kernel lib/images/kernel-qemu -shell
2010-03-10 11:31:00
434
转载 Kernel Memory Layout on ARM Linux
Start End Use --------------------------------------------------------------------------ffff8000 ffffffff copy_user_page / clear_user_page use.
2010-03-10 09:18:00
1576
1
原创 cscope的使用
s symbol: find all references to the token under cursorg global: find global definition(s) of the token under cursorc calls: find all calls to the function name under cursort te
2010-03-04 09:51:00
393
原创 patch和diff
1. 生成patchdiff -Naur olddir(oldfile) newdir(newfile) > new-patchdiff -Naur --exclude=.svn olddir newdir > new-patch 2. 使用patchpatch -p1 cat new-patch | patch -p1
2010-03-02 09:45:00
329
原创 mount命令
1. mount ramdiskmount ramimage /mnt/ramdisk -t ext2 -o loop=/dev/loop3 2.在目标机上mount nfs文件系统mount -t nfs -o nolock $(ip):/home/nchen/work/nfsroot /nfsroot
2010-03-02 09:36:00
444
原创 Bash Shell使用技巧
1. Makefile与Shell取环境变量的不同方法Makefile: cc=$(CROSS_COMPILE)Shell: cc=$CROSS_COMPILE 2.从命令中得到值removable=$(cat /sys/block/$1/removable) 3. whileexport TSLIB_TSDEVICE=/dev/tscounter=1whi
2010-03-02 09:33:00
481
原创 uboot环境变量脚本
setenv loader_addr 0xcxxxxxxxsetenv bootloader_loc /home/nchen/work/images/u-boot.binsetenv kernel_loc /home/nchen/work/images/uImagesetenv defenv_loc soc.imgsetenv rootfs_loc /home/nchen/work
2010-03-02 09:28:00
995
原创 各种查找文件的脚本
1. Linux内核#!/bin/bashLNX=.find . / -path "$LNX/arch/*" ! -path "$LNX/arch/arm*" -prune -o / -path "$LNX/inclu
2010-03-02 09:19:00
787
原创 Linux Kernel API (2.6)
For UP system #protect share dataspin_lock/spin_unlock: protect the data during process context(and only at process context), and make sure your code bewteen lock/unlock is fast enough.There may
2010-02-26 09:39:00
591
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人