移植环境(红色粗字体字为修改后内容,蓝色粗体字为特别注意内容)

1,主机环境:VMare下CentOS 5.5 ,1G内存。

2,集成开发环境:Elipse IDE

3,编译编译环境:arm-linux-gcc v4.4.3,arm-none-linux-gnueabi-gcc

v4.5.1。

4,开发板:mini2440,2M nor flash,128M nand flash。

5,u-boot版本:u-boot-2009.08

6,linux 版本:linux-2.6.32.2

7,参考文章:

嵌入式linux应用开发完全手册,韦东山,编著。

Mini2440 之Linux 移植开发实战指南

到目前为止,我们一直都在命令行下移植,查看结果,LCD

屏幕上似乎总是如伸手不见五指的黑夜,神秘而又无可奈何,从这里开始,我们就要打开这道神秘之门了。

【1】LCD 背光控制原理

在 mini2440/micro2440 开发板中,LCD 背光是通过CPU 的LCD_PWR

引脚来控制的,从原理图中可以看出,它对应于GPG4,如图

当LCD_PWR

输出为高电平“1”时,将打开背光;当输出为低电平“0”时,将关闭背光(注意:这里只是打开和关闭背光,而并没有背光亮度的调节作用)。

【2】 在内核中添加背光驱动程序

现在,我们需要增加一个简单的背光驱动,以便能够通过软件便可简单的控制背光的开关。我们要达到的目的是:在命令终端通过向背光设备发送偶数比如“0”便可关闭背光,发送奇数比如“1”便可打开背光,这样使用起来就方便多了,而不需要专门的应用程序控制它,正如在用户手册中所描述的方法(2.5.10

控制LCD 的背光):

提示:LCD 背光设备文件:/dev/backlight

在命令行种输入:echo 0 > /dev/backlight 可以关闭LCD 背光。

在命令行种输入:echo 1 > /dev/backlight 可以打开LCD 背光。

为了实现这点,我们在linux-2.6.32.2/drivers/video/backlight 目录增加一个mini2440_backlight.c文件,内容如下:

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define DEVICE_NAME

"backlight"//设备名称#define DEVICE_MINOR

5//次设备号,这里我们将设备注册为misc设备,这种设备的主设备号都为10

extern void

s3c2410_gpio_setpin(unsigned int pin, unsigned int to);

extern void s3c2410_gpio_cfgpin(unsigned int pin, unsigned int

function);

static int

mini2440_backlight_ioctl(struct inode

*inode, struct file *file, unsigned int cmd, unsigned long arg)

{

switch(cmd)

{

case 0:

//当接收的命令为0时,就将GPG4引脚设为低电平,关闭背光s3c2410_gpio_setpin(S3C2410_GPG(4), 0); printk(DEVICE_NAME " turn off!\n");

return 0;

case 1:

//当接收的命令为1时,就将GPG4引脚设为高电平,开启背光s3c2410_gpio_setpin(S3C2410_GPG(4), 1); printk(DEVICE_NAME " turn on!\n");

return 0;

default:

return -EINVAL;

}

}

static struct file_operations

dev_fops = {

.owner =

THIS_MODULE,

.ioctl =

mini2440_backlight_ioctl,//这里只使用控制IO口的方式来控制背光};

static struct miscdevice misc

=

{

.minor =

DEVICE_MINOR,

.name =

DEVICE_NAME,

.fops =

&dev_fops,

};

static int __init

dev_init(void)

{

int ret;

ret =

misc_register(&misc);//注册成misc设备if(ret < 0)

{

printk("Register misc device fiald!");

return ret;

}

//将GPG4口配置成输出口s3c2410_gpio_cfgpin(S3C2410_GPG(4),

S3C2410_GPIO_OUTPUT); return

ret;

}

static void __exit

dev_exit(void)

{

misc_deregister(&misc);//注销该misc设备}

module_init(dev_init);

module_exit(dev_exit);

MODULE_LICENSE("GPL");

MODULE_AUTHOR("singleboy");

MODULE_DESCRIPTION("Backlight control for mini2440");

【3】把背光配置选项加入内核配置菜单

打开linux-2.6.32.2/drivers/video/backlight/Kconfig,定位到1929行附近,加入如下代码:

#

# Backlight & LCD drivers configuration

#

menuconfig BACKLIGHT_LCD_SUPPORT

bool "Backlight & LCD device

support"

help

Enable this to be able to

choose the drivers for controlling the

backlight and the LCD panel on

some platforms, for example on PDAs.

#在里加入MINI2440 的背光驱动配置config

BACKLIGHT_MINI2440

tristate "Backlight support for mini2440 from

FriendlyARM"

depends on BACKLIGHT_LCD_SUPPORThelp

backlight driver for MINI2440 from

FriendlyARM

#

# LCD

#

config LCD_CLASS_DEVICE

再打开

linux-2.6.32.2/drivers/video/backlight/Makefile,定位到文件末尾,根据配置定义加入驱动目标文件,如下:

obj-$(CONFIG_BACKLIGHT_ADP5520) +=

adp5520_bl.oobj-$(CONFIG_BACKLIGHT_MINI2440)

+= mini2440_backlight.o

这样,我们就在内核中移植好了 mini2440 的背光驱动。

【4】在内核配置菜单中确认"Backlight support for mini2440 from

FriendlyARM",被选中。

在内核源代码根目录执行:

make menuconfig,依次选择如下子菜单:

Device Drivers --->

Graphics support --->

[*] Backlight & LCD device

support --->

就可以找到该配置选项,如图

在这里,如果没有被选中,按空格选中我们刚刚加入的mini2440 配置项,然后退出时保存内核配置菜单,在命令行执行:make

uImage

将生成的arch/arm/boot/uImage复制到/nfsboot目录下,然后启动开发板,可以在启动时看到LCD屏显示的企鹅图像,这说明我们已经点亮了背光。

【5】编写测试程序linux-test/codetest/backlight_test.c,代码如下:

#include

#include

#include

#include

int main(int argc, char

**argv)

{

int

turn;

int

fd;

//检测命令后面带的参数

if(argc == 1

|| argc > 2)

{

printf("Usage: backlight_test on|off!\n");

exit(1);

}

//打开背光设备

fd =

open("/dev/backlight", O_RDWR);

if(fd <

0)

{

printf("Open Backlight Device Faild!\n");

exit(1);

}

//判断输入的参数

if(strcmp(argv[1], "on") == 0)

{

turn = 1;

}

else

if(strcmp(argv[1], "off") == 0)

{

turn = 0;

}

else

{

printf("Usage: backlight_test on|off!\n");

exit(1);

}

//进行IO控制

ioctl(fd,

turn);

//关闭背光设备

close(fd);

return 0;

}

然后保存退出,之后在主机终端交叉编译

[root@localhost codetest]# arm-linux-gcc -o backlight_test

backlight_test.c

将其复制到nfsboot目录下以便在开发板挂载该目录后能够执行

[root@localhost codetest]# cp backlight_test /nfsboot/nfs

【6】挂载nfs文件系统

在目标板的串口终端中执行

[root@mini2440 /mnt]#mkdir nfs[root@mini2440

/mnt]#ls

data etc jffs2 nfs temp yaffs

[root@mini2440 /]#mount -o nolock -t nfs 10.1.0.128:/nfsboot/nfs

/mnt/nfs //注意要加 -o nolock参数,否则挂载不上。

[root@mini2440 /]#cd mnt/nfs

[root@mini2440 nfs]#ls

backlight_test

【7】运行测试程序

[root@mini2440 nfs]#./backlight_test

[root@mini2440 nfs]#./backlight_test --help

Usage: backlight_test on|off!

[root@mini2440 nfs]#

[root@mini2440 nfs]#./backlight_test off

backlight turn off! //观察LCD屏,看到背光灯灭了[root@mini2440 nfs]#./backlight_test

on

backlight turn on! //观察LCD屏,看到背光灯亮了

[root@mini2440 nfs]#./backlight_test off

backlight turn off! //观察LCD屏,看到背光灯又灭了

[root@mini2440 nfs]#./backlight_test

on

backlight turn on! //观察LCD屏,看到背光灯亮了

只不过LCD 驱动还有些问题,下一节我们将会详细的介绍如何移植LCD 驱动。

linux 内核配置lcd,Linux-2.6.32.2内核在mini2440上的移植---添加LCD背光驱动相关推荐

  1. linux字体配置要略,Linux字体配置要略.pdf

    / Linux 字体配置要略 Linux 字体配置要略 2012-02-15 我并不清楚 fontconfig . xfont . libfreetype 或某某库等等之间的界限与联系,其实作为普通用 ...

  2. mini2440 linux移植开发实战指南,Linux-2.6.32.2内核在mini2440上的移植---移植SD卡驱动...

    移植环境(红色粗字体字为修改后内容,蓝色粗体字为特别注意内容) 1,主机环境:VMare下CentOS 5.5 ,1G内存. 2,集成开发环境:Elipse IDE 3,编译编译环境:arm-linu ...

  3. linux 2.6.35 内核配置 usb,Linux 2.6.24.4移植到S3C2410(nano2410)之:USB

    Linux 2.6.24.4移植到S3C2410(nano2410)之:USB [平台信息] 目标板(Nano2410)------------------------ CPU: S3C2410X S ...

  4. linux内核配置重置,linux内核配置--Boot options

    内核的配置过程依赖Makefile和arch/arm/Kconfig以及其他文件下的Kconfig文件,通过make menuconfig或者桌面环境下的xconfig/gconfig可以手动配置内核 ...

  5. arm linux 内核配置,嵌入式 Linux开发Kernel移植(二)——kernel内核配置和编译

    嵌入式 Linux开发Kernel移植(二)--kernel内核配置和编译 本文选择linux 2.6.35.7版本kernel进行实践. 一.linux kernel源码目录分析 Kbuild,Ke ...

  6. linux vim编辑kconfig 无法wq,Linux-4.9.2内核在mini2440上的移植(三)——编译环境测试...

    原因:没有安装make工具,安装一下 root@ubuntu:~/linux-4.9.2#apt  install  make 再重试,又出错 root@ubuntu:~/linux-4.9.2#ma ...

  7. zynq linux ip配置,ZYNQ+linux网口调试笔记(2)PS-GEM1

    1. 开发环境 Windows SDK 2017.4 Ubuntu Petalinux 2017.4 硬件平台:米联客ZYNQ开发板MIZ7035 2. 开发目标 在ZYNQ上使用gigE Visio ...

  8. linux vim配置c,Linux入门学习教程:GNU C及将Vim打造成C/C++的半自动化IDE

    C语言在Linux系统中的重要性自然是无与伦比.不可替代,所以我写Linux江湖系列不可能不提C语言.C语言是我的启蒙语言,感谢C语言带领我进入了程序世界.虽然现在不靠它吃饭,但是仍免不了经常和它打交 ...

  9. linux基础配置脚本,Linux中selinux基础配置教程详解

    selinux(Security-Enhanced Linux)安全增强型linux,是一个Linux内核模块,也是Linux的一个安全子系统. 三种模式: Enforcing:强制模式,在selin ...

最新文章

  1. 朴素贝叶斯(NBM,Naive Bayesian Model)为什么朴素又有哪些形式?
  2. Xilinx_ISE 14.7在Win10下选择“open project”崩溃闪退的问题
  3. 003_SQL语言简介
  4. JVM调优:-Xms40M -Xmx60M 指定堆的最小、最大大小
  5. Boost:projection years投影年的测试程序
  6. UIKit 框架之UIActionSheet
  7. easy html5 - Jquery mobile
  8. 【渝粤题库】陕西师范大学202961 教育社会学 作业(高起本、专升本)
  9. 前端学习(3335):ant design中按钮尺寸的大小
  10. php 谷歌翻译api_武汉武昌区地质勘测翻译公司-译嘉合翻译
  11. 关于索引我能说的那些事儿
  12. es6 Class 的继承简介
  13. Windows句柄和指针的区别
  14. 国内搭建vite vue和国外的不一样的,跟着教程会踩很多坑
  15. 写不出满分作文怎么办,GPT-3 来帮你
  16. 信息安全管理的效益分析
  17. unity获取电磁笔压感_电磁屏技术如何实现真实笔锋精准点触
  18. 当心PayPal,Amazon认真对待付款
  19. [附源码]java毕业设计医疗预约系统
  20. 做DSP应该懂的56个问题,反正我已经收藏了!

热门文章

  1. 英雄联盟破败王BUG解析
  2. Gzip,BZip2,Lzo,Snappy总结
  3. C++ 编译错误 will be initialized after [-Werror=reorder]
  4. python——读取txt文本数据并可视化
  5. java答题软件_Java程序设计:使用软件解题
  6. excel数据库_EXCEL中的数据库函数DSUM真强大,SUMIFS已下线
  7. 什么是前端跨域,怎么解决跨域问题
  8. 制作后台网站管理系统
  9. C语言编程 运费问题,ABC邮寄杂货店问题,小白求教
  10. kernel logo到开机卡通片之间闪现黑屏(android 5.X)