_oo0oo_
o8888888o
88" . "88
(| -_- |)
0\ = /0
___/`---'\___
.' \\| |// '.
/ \\||| : |||// \
/ _||||| -:- |||||- \
| | \\\ - /// | |
| \_| ''\---/'' |_/ |
\ .-\__ '-' ___/-. /
___'. .' /--.--\ `. .'___
."" '< `.___\_<|>_/___.' >' "".
| | : `- \`.;`\ _ /`;.`/ - ` : | |
\ \ `_. \_ __\ /__ _/ .-` / /
=====`-.____`.___ \_____/___.-`___.-'=====
`=---='
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
佛祖保佑 永无BUG
linux kernel version:3.12.10-ti2013.12.01
compile :arm-linux-gnueabihf-gcc
因为是搞完了在写的,可能会有遗漏,见谅。
板子上三轴lis3dh在i2c-2上。
在dts中打开i2c-2在添加传感器的信息。
&i2c2{
pinctrl-names = "default", "sleep";
pinctrl-0 = <&i2c2_pins_default>;
pinctrl-1 = <&i2c2_pins_sleep>;
lis331dlh: lis331dlh@18 {
compatible = "st,lis331dlh", "st,lis3lv02d";
reg = <0x18>;
Vdd-supply = <&lis3_reg>;
Vdd_IO-supply = <&lis3_reg>;
st,click-single-x;
st,click-single-y;
st,click-single-z;
st,click-thresh-x = <10>;
st,click-thresh-y = <10>;
st,click-thresh-z = <10>;
st,irq1-click;
st,irq2-click;
st,wakeup-x-lo;
st,wakeup-x-hi;
st,wakeup-y-lo;
st,wakeup-y-hi;
st,wakeup-z-lo;
st,wakeup-z-hi;
st,min-limit-x = <120>;
st,min-limit-y = <120>;
st,min-limit-z = <140>;
st,max-limit-x = <550>;
st,max-limit-y = <550>;
st,max-limit-z = <750>;
};
}
编译dtb文件
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- am335x-evm.dtb
修改linux配置
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
选中
* Polled input device skeleton
m STMicroeletronics LIS3LV02Dx three-axis digital accelerometer (I2C)
m ST Microelectronics LIS3L02DQ Accelerometer Driver
编译zImage
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage
编译lis3lv02d
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- SUBDIRS=/kernel/path/drivers/misc/lis3lv02d
启动linux
insmod lis3lv02d.ko
出现报错:
[ 875.937741] lis3lv02d: no symbol version for input_allocate_polled_device
[ 875.944892] lis3lv02d: Unknown symbol input_allocate_polled_device (err -22)
[ 875.953059] lis3lv02d: no symbol version for input_free_polled_device
[ 875.959873] lis3lv02d: Unknown symbol input_free_polled_device (err -22)
[ 875.967180] lis3lv02d: no symbol version for input_register_polled_device
[ 875.974306] lis3lv02d: Unknown symbol input_register_polled_device (err -22)
[ 875.982272] lis3lv02d: no symbol version for input_unregister_polled_device
[ 875.989619] lis3lv02d: Unknown symbol input_unregister_polled_device (err -22)
将/kernel/path下的Module.symvers文件拷贝到/kernel/path/drivers/misc/lis3lv02d
重新编译
编译lis3lv02d
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- SUBDIRS=/kernel/path/drivers/misc/lis3lv02d
编译完成
insmod lis3lv02d.ko
insmod lis3lv02d_i2c.ko
cat /sys/devices/platform/lis3lv02d/position
(-36,0,1080)
完成啦
lis3lv02d 直接选择 M lis3lv02d_i2c 选择y 就不需要insmod,就直接可以使用了