linux dev目录:
这个目录中包含了所有Linux系统中使用的外部设备。它实际上是一个访问这些外部设备的端口。我们可以非常方便地去访问这些外部设备,和访问一个文件,一个目录没有任何区别。Linux的风格一切都是文件
kd_camera_hw是camera注册的字符设备,c代表字符设备 (d 代表directory目录,l代表link链接,b代表block块设备,p代表pipe管道,s代表sock通信),其次对应的权限是owner group other的读写执行权限(chmod),第2个字段代表链接的个数,第3、4个字段代表owner,group(chown、chgrp),第5、6个字段代表设备文件的主次设备号(2.6内核把主设备号由8扩展到12位,次设备号由8位扩展到20位)
#define MINORBITS 20
#define MINORMASK ((1U << MINORBITS) - 1)
#define MAJOR(dev) ((unsigned int) ((dev) >> MINORBITS))
#define MINOR(dev) ((unsigned int) ((dev) & MINORMASK))
#define MKDEV(ma,mi) (((ma) << MINORBITS) | (mi))//主次设备号合并转换成dev_t类型
linux proc目录
这个目录是伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,用户可以通过这些文件查看有关系统硬件及当前正在运行进程的信息,甚至可以通过更改其中某些文件来改变内核的运行状态。proc只读
cat proc/driver/camera_info
CAM_Info[0]:hi1336_mipi_raw;
Pre: TgGrab_w,h,x_,y= 4208, 3120, 0, 0, delay_frm= 1
Cap: TgGrab_w,h,x_,y= 4208, 3120, 0, 0, delay_frm= 1
Vid: TgGrab_w,h,x_,y= 4208, 3120, 0, 0, delay_frm= 1
HSV: TgGrab_w,h,x_,y= 640, 480, 0, 0, delay_frm= 3
SLV: TgGrab_w,h,x_,y= 1280, 720, 0, 0, delay_frm= 3
Seninf_Type(0:parallel,1:mipi,2:serial)=1,
output_format(0:B,1:Gb,2:Gr,3:R)= 1
Driving_Current(0:2mA,1:4mA,2:6mA,3:8mA)=0, mclk_freq=24, mipi_lane=4
PDAF_Support(0:No PD,1:PD RAW,2:VC(Full),3:VC(Bin),4:Dual Raw,5:Dual VC= 2
HDR_Support(0:NO HDR,1: iHDR,2:mvHDR,3:zHDR)= 0
alps/kernel-4.19/drivers/misc/mediatek/imgsensor/src/common/v1/imgsensor.c
static inline int adopt_CAMERA_HW_GetInfo2(void *pBuf){
/*Add info to proc: camera_info */
}
cat /proc/cmdline 输出内核启动命令行
cat /proc/devices 输出主设备号+文件名称 (驱动设备分类:字符、块、网络、闲杂)
Character devices:
1 mem
4 ttyS
5 /dev/tty
5 /dev/console
5 /dev/ptmx
...
496 accdet
497 kd_camera_hw
498 MT_pmic_adc_cali
Block devices:
1 ramdisk
7 loop
8 sd
65 sd
...
cat /proc/modules 输出可加载模块的信息
cat /proc/meminfo 压测后关注有没有内存泄露
ls /proc/device-tree -al 链接指向 /sys/firmware/devicetree/base
cat /proc/kmsg也是打印内核的信息,第二次打印会情况第一次的信息(adb shell dmesg 打印内核启动过程的所有信息,会被保存)
linux sys目录
这个目录是一个类似于proc文件系统的特殊文件系统,用于将系统中的设备组织成层次结构,并向用户模式程序提供详细的内核数据结构信息。
cat /sys/devices/platform/1a040000.kd_camera_hw1/of_node/cam0_enable_sensor
hi1336_mipi_raw
该目录下cam0_vcamd-supply cam0_vcamio-supply 对应配置dtsi中的内容
cat/sys/devices/platform/pinctrl@1000b000/mt_gpio | grep 99
099: 0100000100
对应格式如下:
PIN:(MODE)(DIR)(DOUT)(DIN)(DRIVER)(SMT)(IES)(PULL_EN)(PULL_SEL)(R1 R0)
如果gpio 99 设置为mclk引脚,进入camera,MODE会变成1(mclk mode), 0是(gpio mode)
099: 110000010
ls /sys/bus/i2c/devices/i2c-2/of_node/ 可以查看i2c下挂载的设备
camera_main@40
camera_main_af@0c
camera_main_eeprom@50
bus子目录下包含两个子目录,devices和drivers;devices符号链接到/sys/devices/下的设备;而drivers下是注册在这个总线上的驱动
/sys/firmware/devicetree/base/kd_camera_hw1@1a040000 platform中的of_node所指向
/sys/module 系统中所有的模块信息,不论这些模块是以内联(inlined)方式编译到内核映像文件中还是编译为外模块(.ko文件)
结合博客MTK Flashlight闪光灯可以定位出闪光灯的测试节点在
for /l %%I in (1,1,50) do (
adb shell "echo 0 > /sys/bus/platform/devices/flashlights_led191/led_flash"
adb shell "echo 1 > /sys/bus/platform/devices/flashlights_led191/led_flash"
ping /n 3 127.0.0.1 >nul)