自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Peter Chen的专栏

专注于Linux内核与驱动

  • 博客(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

原创 浅谈USB的安全性

最近看到一些,有关BadUSB的报道

2014-08-10 19:32:30 2000

转载 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

原创 我的女儿昨天会走路了

女儿可欣,在她13个月时,开始走路咯

2012-05-09 14:17:21 649

原创 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

原创 C语言拾遗

1. ^ is NOR, 2^4 is 0x6, 2^5 is 0x7, 2^6 is 0x4.

2010-04-08 11:10:00 513

原创 内核启动的一些总结

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

原创 其它命令的使用

1.如何设置IP地址:sudo ifconfig usb0 10.0.0.1 netmask 255.255.255.0 up

2010-03-04 09:47:00 366

原创 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关注的人

提示
确定要删除当前文章?
取消 删除