【原创分享】嵌入式linux应用之内核移植定制篇-后篇(修复部分问题)(linux-3.8.12 mini2440)
来源:互联网 发布:智能网络液晶电视 编辑:程序博客网 时间:2024/06/06 01:24
前面一个linux3.8.12的内核已经可以跑起来了,只不过,解决了网络以后还是有一堆问题影响正常使用,有3个问题需要解决。
同样准备工作:
1.linux 3.8.12 移植进度请参考上篇博文前篇、
2.uboot
3.ubuntu
4.mini2440
5.ts_lib1.4 需要重新移植,因为我一直使用以前友善的yaff2文件系统。
一:背光
背光的问题简单,仅仅改变下初始化的默认电平即可,在drivers/leds目录下leds-s3c24xx.c文件的s3c24xx_led_probe函数增加两句
static int s3c24xx_led_probe(struct platform_device *dev){struct s3c24xx_led_platdata *pdata = dev->dev.platform_data;struct s3c24xx_gpio_led *led;int ret;led = devm_kzalloc(&dev->dev, sizeof(struct s3c24xx_gpio_led), GFP_KERNEL);if (led == NULL) {dev_err(&dev->dev, "No memory for device\n");return -ENOMEM;}platform_set_drvdata(dev, led);led->cdev.brightness_set = s3c24xx_led_set;led->cdev.default_trigger = pdata->def_trigger;led->cdev.name = pdata->name;led->cdev.flags |= LED_CORE_SUSPENDRESUME;led->pdata = pdata;ret = devm_gpio_request(&dev->dev, pdata->gpio, "S3C24XX_LED");if (ret < 0)return ret;/* no point in having a pull-up if we are always driving */s3c_gpio_setpull(pdata->gpio, S3C_GPIO_PULL_NONE);if (pdata->flags & S3C24XX_LEDF_TRISTATE)gpio_direction_input(pdata->gpio);elsegpio_direction_output(pdata->gpio,pdata->flags & S3C24XX_LEDF_ACTLOW ? 1 : 0); if(pdata->name == "backlight")//第一句 gpio_set_value(pdata->gpio,1);//第二句/* register our new led device */ret = led_classdev_register(&dev->dev, &led->cdev);if (ret < 0)dev_err(&dev->dev, "led_classdev_register failed\n");return ret;}
二:ADC
因为触摸屏驱动是建立在ADC基础上的,所以必须先准备ADC驱动。。 因为是一个新内核,为了方便管理,我自己喜欢在移植驱动建立自己的文件夹
就像有些朋友,移植干脆在board下建立自己的板子的整个文件夹。
1.进入内核根目录。在driver下建立一个文件夹 如“lynn”,同时建立两个空文件,一个Makefile,一个Kconfig 内核编译时必的文件。
2.修改driver目录下的文件makefile,最后一行添加
obj-y += lynn/
3.修改driver目录下的文件Kconfig,添加
source "drivers/lynn/Kconfig"
4,进入lynn文件夹,修改makefile,添加
obj-$(CONFIG_MINI2440_ADC) += mini2440_adc.o
5.同样修改Kconfig文件
menu "lynn Drivers"config LYNN_LED_DRIVERtristate "MINI2440 LED driver"help JUST TESTconfig MINI2440_ADC bool "ADC driver for MINI2440" depends on MACH_MINI2440 default y if MACH_MINI2440 help JUST TESTendmenu
当选择MACH_MINI2440默认就选择编译此项,建议这样,这样就不用make menuconfig去改了。
6.从之前的内核版本中,如友善的linux-2.6.32 里面ADC驱动都是写好的。我们直接复制过来文件mini2440_adc.c,s3c24xx-adc.h。
同时修改文件mini2440_adc.c
//DECLARE_MUTEX(ADC_LOCK);DEFINE_SEMAPHORE(ADC_LOCK);
新版本定义方式不一样了,所以需要更改,否则编译这里会出错。找不到ADC_LOCK;可以看SEMAPHORE.C文件。
7.mke menuconfig 如下图,进入之后发现已经选择了,退出即可
8.make zImage uboot烧写测试即可。测试程序我就不写了。贴个网上的吧,可以自己arm-linux-gcc 编译后给开发板运行。运行效果
可以调节电位器来看效果。。。
三:触摸屏
ADC好了,触摸屏还是不能用。如果要使用qt的话,还要进行TS移植,虽然内核有很多种触摸屏,但是没有一个适合的。所以放弃
直接移植吧。同ADC的方法一样。
1.拷贝文件s3c2410_ts.c到lynn目录下,
2.修改makefile与kconfig文件加入s3c2410_ts.c的选项
参考ADC ...
3.make menuconfig
4.make
uboot来测试效果。
四:tslib移植
我用的之前的yaffs2的系统用新内核后,tslib是没有用了。查阅了下资料,需要更新下,因为友善的tslib是修改蛮多的。
1.下载tslib
2.配置
./autogen.sh./configure --host=arm-linux --prefix=$PWD/tslib --enable-inputapi=nomakemake install
3.生成的tslib 拷贝到开发板usr/local/tslib这里。
4.修改开发板的变量etc/profile添加
export T_ROOT=/opt/local/tslib/export LD_LIBRARY_PATH=$T_ROOT/libexport TSLIB_CONSOLEDEVICE=noneexport TSLIB_FBDEVICE=/dev/fb0 export TSLIB_TSDEVICE=/dev/event0export TSLIB_PLUGINDIR=$T_ROOT/lib/tsexport TSLIB_CONFFILE=$T_ROOT/etc/ts.confexport TSLIB_CALIBFILE=/etc/pointercal
5.source /etc/profile 导入变量,进入tslib/bin下测试。
好了,这样子,基本没有什么大问题了,有什么其他问题,后续慢慢解决,毕竟内核太新了,很多东西都已经不是很匹配了,适用就好
千万不要追新。要不太苦了,我就是,哈哈。
后续问题解决
有朋友说按照这样移植后,发现触摸屏校验程序无反应。实际上有一个地方需要改动
修改内核/include/uapi/include/linux/input.h 文件中的
#define EV_VERSION 0x010001
改为:
#define EV_VERSION 0x010000
重新编译后就好了。
sdcard分区无法识别问题。其实默认都是打开SD支持了的。不过有几个地方要改动
make menuconfig
file systems--->native language support---->codepage 437 别用模块模式
还有几个语言的一并选择编译。重新烧写。可以发现sd卡文件了。
- 【原创分享】嵌入式linux应用之内核移植定制篇-后篇(修复部分问题)(linux-3.8.12 mini2440)
- 【原创分享】嵌入式linux应用之内核移植定制篇-前篇(linux-3.8.12 mini2440)--20130824
- 【原创分享】嵌入式linux应用之U-BOOT移植定制篇--20130822
- 【原创】嵌入式LINUX内核移植(mini2440)----09.02
- linux之mini2440内核移植
- 嵌入式 移植Linux内核到mini2440常见问题
- 【嵌入式Linux学习七步曲之第四篇 Linux内核移植】用BDI2000快速定位PPC Linux内核Uncompressing Kernel Image ... OK后无输出问题
- linux--mini2440内核移植
- mini2440嵌入式Linux内核下网卡DM9000E移植
- 嵌入式学习笔记(2)--嵌入式Linux内核定制
- linux 2.6.32.2内核移植(MINI2440)步骤
- mini2440的 linux内核移植
- linux--mini2440内核移植手册
- mini2440的Linux内核移植
- mini2440 的Linux 内核移植
- linux内核移植到mini2440:
- linux-2.6.32在mini2440开发板上移植(0)之内核准备与编译
- 嵌入式Linux内核移植
- 2013 多校第九场 hdu 4699 Editor(vector OR splay tree)
- 多态的优势与特点,为什么用多态
- Delegate如何进行类型转换?
- 【讲解各种手机所有内存卡知识】
- Unix 环境高级编程学习笔记(一)
- 【原创分享】嵌入式linux应用之内核移植定制篇-后篇(修复部分问题)(linux-3.8.12 mini2440)
- 备份所有短信
- 输入一个整数n,求从1 到n 这n 个整数的十进制表示中1 出现的次数)
- Java中的各访问修饰符权限
- 64位编程模型:为什么要使用LP64(三)
- 解决liblzo2.so缺失
- cocos2d-x开关按钮类CCControlSwitch
- DDR3详解(以Micron MT41J128M8 1Gb DDR3 SDRAM为例)之一
- Activity栈简介