linux26387移植到mini2440miWord文档格式.docx
- 文档编号:8365161
- 上传时间:2023-05-11
- 格式:DOCX
- 页数:7
- 大小:19.44KB
linux26387移植到mini2440miWord文档格式.docx
《linux26387移植到mini2440miWord文档格式.docx》由会员分享,可在线阅读,更多相关《linux26387移植到mini2440miWord文档格式.docx(7页珍藏版)》请在冰点文库上搜索。
240,1,26,5,/*xtiming*/
320,2,5,2,/*ytiming*/
……
修改backlight
staticcharmini2440_features_str[12]__initdata="
0tb"
;
0t"
即不使用backlight,因为如果使用backlight的话,LCD会熄灭背光,直到加载友善之臂提供的backlight驱动。
修改IIC:
删除IIC相关内容
如果采用内核默认的IIC,友善提供的EEPROM读写程序将不能执行,只有去除IIC相关内容或将24c08的地址改为0xA0后才能使用,具体原因尚不清楚,需要阅读内核源代码。
staticvoid__initmini2440_init(void)
{
i2c_register_board_info(0,mini2440_i2c_devs,ARRAY_SIZE(mini2440_i2c_devs));
}
或者是
staticstructi2c_board_infomini2440_i2c_devs[]__initdata={
{
I2C_BOARD_INFO("
24c08"
0x50),I2C_BOARD_INFO("
0xA0),.platform_data=&
at24c08,
},
};
关于LED和Button
Linux的LED驱动和button还是比好的,比如读写nand或mmc时LED就会亮,而button则使用了输入子系统,如将KEY1设置为KEY_RIGHT,则按KEY1时Qt的选择的图标就会向右移动。
我的选择是将LED1设为nand-disk触发,LED2设为mmc0触发,LED3和LED4留出来做其他使用。
KEY1~KEY6设置为KEY_UP、KEY_DOWN、KEY_LEFT、KEY_RIGHT、KEY_SPACE、KEY_ESC,虽然内核默认注释掉了K6,但是开启K6后没有出现问题。
内核提供了input子系统的button程序,但如果将button编译进内核,内核会将button创建为input0,这样Qt默认使用button而不能再使用友善提供的触摸屏驱动,因此,这里button也采用模块方式,并在加载模块时先加载触摸屏,再加载gpio-keys.ko
(4)驱动移植
UDA134x
sound/soc/codecs/uda134x.c
staticintuda134x_startup(structsnd_pcm_substream*substream,......)
......
uda134x->
slave_substream=substream;
}else
master_substream=substream;
#ifdefined(CONFIG_MACH_MINI2440)
uda134x_write(codec,2,2|(5U<
<
2));
/*把录音通道改为VIN2*/
#endif
return0;
DM9000
dm9000可以不修改,但是ping时丢包率很高,一般在70%,建议修改,修改后丢包率在20%以下。
drivers/net/dm9000.c
staticint__init
dm9000_init(void)
#ifdefined(CONFIG_MACH_MINI2440)
#include<
mach/regs-mem.h>
unsignedintoldval_bwscon=*(volatileunsignedint*)S3C2410_BWSCON;
*((volatileunsignedint*)S3C2410_BWSCON)=(oldval_bwscon&
~(3<
16))|
S3C2410_BWSCON_DW4_16|S3C2410_BWSCON_WS4|
S3C2410_BWSCON_ST4;
*((volatileunsignedint*)S3C2410_BANKCON4)=0x1f7c;
printk(KERN_INFO"
%sEthernetDriver,V%s/n"
CARDNAME,DRV_VERSION);
returnplatform_driver_register(&
dm9000_driver);
其他驱动,如adc、backlight、pwm、touchscreen、LED、button采用模块的方式。
LED驱动要修改一下,因为已经使用了LED1和LED2,这里可用的就只有LED3和LED4了。
还需要指出的是友善自带的ADC和PWM驱动在linux-2.6.38.7中不能通过编译,本人在网上搜到一个解决方法,但是要修改内核代码,这并不是我所需要的,看来还是搞懂代码后自己再写一个的好。
(5)编译内核
makeARCH=armCROSS_COMPILE=arm-linux-zImage
可以使用-jn指定编译的进程数,n一般设为处理器个数的3倍,如果使用单核,则用-j2。
(6)编译模块
makeARCH=armCROSS_COMPILE=arm-linux-modules
3、配置选项注意
配置选项根据实际情况裁剪,比如我不使用无线网络和USB转串口的驱动等,但注意以下两点:
KernelFeatures--->
[*]Provideoldwaytopasskernelparameters不选的话supervivi和uboot不能将参数传递给内核
DeviceDrivers--->
Inputdevicesupport--->
[*]Keyboards--->
<
M>
GPIOButtons这里将按键编译为模块方式,原因见上。
如果不使用内核提供的button驱动,这个就不用选了。
1、ADC驱动(mini2440_adc.c)
DECLARE_MUTEX(ADC_LOCK);
DEFINE_SEMAPHORE(ADC_LOCK);
2、LED驱动(mini2440_leds.c)
在我的内核中已经使用了LED1和LED2,这里已经修改成了控制剩余的两个LED,否则会导致内核崩溃。
修改方法就是删除另两个LED相关的部分,比较简单,这里不再列举。
staticintsbc2440_leds_ioctl(structinode*inode,structfile*file,unsignedintcmd,unsignedlongarg)
改为
staticlongsbc2440_leds_ioctl(structfile*file,unsignedintcmd,unsignedlongarg)
staticstructfile_operationsdev_fops={
.owner=THIS_MODULE,
.ioctl=sbc2440_leds_ioctl,
.unlocked_ioctl=sbc2440_leds_ioctl,};
3、PWM驱动(mini2440_pwm.c)
staticints3c24xx_pwm_ioctl(structinode*inode,structfile*file,unsignedintcmd,unsignedlongarg)
staticlongs3c24xx_pwm_ioctl(structfile*file,unsignedintcmd,unsignedlongarg)
.ioctl=s3c24xx_pwm_ioctl,
.unlocked_ioctl=s3c24xx_pwm_ioctl,
init_MUTEX(&
lock);
sema_init(&
lock,1);
4、button驱动和backlight驱动
无需做修改
5、CMOS摄像头驱动
CMOS摄像头涉及5个文件,分别是s3c2440camif.c、s3c2440camif.h、s3c2440_ov9650.c、sccb.c、sccb.h。
sccb.c
staticDECLARE_MUTEX(bus_lock);
staticDEFINE_SEMAPHORE(bus_lock);
s3c2440_ov9650.c
DECLARE_MUTEX(regs_mutex);
DEFINE_SEMAPHORE(regs_mutex);
s3c2440camif.c
内核中删除了S3C2440_GPJ0的定义,用S3C2410_GPJ(0),替换后发现也可以用。
但是加载该模块后,IICEEPROM24C08不能再读取或写入,这里是因为sccb.c中将GPE14和GPE15设为IO方式,而不是IIC方式,在后来也没有改回去。
但是在linux-2.6.32中该驱动是可以的,怀疑该问题同内核也有关系,暂时不清楚。
这里只是在模块卸载程序的最后添加将GPE14和GPE15改为IIC模式的两条语句,这样修改的结果是,只有在该摄像头模块卸载后才能读写24C08。
s3c2410_gpio_cfgpin(S3C2440_GPJ0,S3C2440_GPJ0_CAMDATA0);
s3c2410_gpio_cfgpin(S3C2410_GPJ(0),S3C2440_GPJ0_CAMDATA0);
staticvoid__exitcamif_cleanup(void)
s3c2410_gpio_cfgpin(S3C2410_GPE(14),S3C2410_GPE14_IICSCL);
s3c2410_gpio_cfgpin(S3C2410_GPE(15),S3C2410_GPE15_IICSDA);
最后再提一点,关于多文件编译成一个模块的Makefile,如下:
ifneq($(KERNELRELEASE),)
obj-m:
=s3c2440camera.o
s3c2440camera-objs:
=s3c2440_ov9650.osccb.os3c2440camif.o
else
KDIR:
=/home/408/linux-2.6.38.7
PWD:
=`pwd`
all:
make-C$(KDIR)M=$(PWD)modulesARCH=armCROSS_COMPILE=arm-linux-
.PHONY:
clean
clean:
rm-f*.ko*.o*.mod.o*.mod.c*.symvers*.order
endif
6、触摸屏
触摸屏问题主要是tslib要检测内核input子系统的版本号,详细参考《linux-2.6.38内核移植的经验和疑惑》一文,代码在tslib-1.4/plugins/input-raw.c中,我这里并没有按照该文指出的方法修改,而是直接将比较部分注释掉,编译talib-1.4的方法参考《tslib1.4在ARM板Micro2440上移植》,编译完成后只需用编译的input.so(output/lib/ts/input.so)文件替换友善根文件系统中的input.so(/usr/local/lib/ts/input.so)文件即可。
staticintcheck_fd(structtslib_input*i)
if(!
((ioctl(ts->
fd,EVIOCGVERSION,&
version)>
=0)&
&
/*(version==EV_VERSION)&
*/
附注:
1、《linux-2.6.38内核移植的经验和疑惑》部分内容
再补充一个问题:
触摸屏驱动虽然移植成功了可是tslib没有作用,触摸屏还是没有用,
我用ts_test测试终端打印了
tslib:
Selecteddeviceusesadifferentversionoftheeventprotocolthantslibwascompiledfor
查看tslib源代码发现打印该信息的语句在tslib的源代码的plugs文件夹中input-raw.c的staticintcheck_fd(structtslib_input*i)函数中,发现tslib在加载linux触摸屏驱动模块时会检查内核的输入子系统的版本号:
if(ioctl(ts->
version)<
0){
fprintf(stderr,"
SelecteddeviceisnotaLinuxinputeventdevice/n"
);
return-1;
}
上面程序段将驱动的版本号存放在整型的version中
if(version!
=EV_VERSION){
Selecteddeviceusesadifferentversionoftheeventprotocolthantslibwascompiledfor/n"
该程序将获得的版本号version与本tslib的面向的版本号匹配,若不同则打印:
信息
再看arm交叉编译工具中的头文件库中的linux/input.h中的EV_VERSION定义为
#defineEV_VERSION0x010000
而linux内核include/linux/input.h中的EV_VERSION定义为
#defineEV_VERSION0x010001
由此可见问题就出现在内核的输入子系统的版本号不匹配的问题
解决办法:
1.将内核源代码里的include/linux/input.h中的
改为:
2.将arm交叉编译工具中的头文件库中的
linux/input.h中的
改为
再编译tslib库
2、《tslib1.4在ARM板Micro2440上移植》部分内容
1.首先从网上下载的tslib-1.4.tar.gz
2.解压tarxvzftslib-1.4.tar.gz;
cdtslib
3.生成configure,这里比一般的开源项目少做一步,要先运行解压目录下的脚本
./autogen.sh
4.用configure生成Makefile.
生成脚本:
./configure--host=arm-linux--prefix=$PWD/../../output/arm-linuxac_cv_func_malloc_0_nonnull=yes--enable-inputapi=no
5.编译安装
make
makeinstall-strip#安装strip后的库
#makeinstall#安装没有strip库版本.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- linux26387 移植 mini2440mi
![提示](https://static.bingdoc.com/images/bang_tan.gif)