基于S3C2440数码相框

发布者:zeta16最新更新时间:2024-07-29 来源: cnblogs关键字:S3C2440  数码相框 手机看文章 扫描二维码
随时随地手机看文章

【参考】韦东山 教学笔记

1. 程序框架
1.1 触摸屏:
主按线程,通过socket发给显示进程
---------------------------
封装事件:ts线程 按键线程
---------------------------
操作系统

封装的数据有:
时间
类型(点击、上下左右移动)
位置
速度
幅度

1.2 显示

放大(上) 缩小(下) 左边 右边 当前 显示控制 接收sochket

libjpeg
mmap
----------------------------------------
内存 内存 内存 内存 内存

framebuffer
-----------
LCD

2. 显示文字
2.1 文字编码方式
源文件用不同的编码方式编写,会导致执行结果不一样。
怎么解决?编译程序时,要指定字符集
man gcc , /charset
-finput-charset=charset 表示源文件的编码方式, 默认以UTF-8来解析
-fexec-charset=charset 表示可执行程序里的字时候以什么编码方式来表示,默认是UTF-8

gcc -o a a.c //

gcc -finput-charset=GBK -fexec-charset=UTF-8 -o utf-8_2 ansi.c


2.2 英文字母、汉字的点阵显示
测试:
A. 配置、修改内核支持把lcd.c编译进去
cp /work/drivers_and_test_new/10th_lcd/lcd.c drivers/video/
修改drivers/video/Makefile
#obj-$(CONFIG_FB_S3C2410) += s3c2410fb.o
obj-$(CONFIG_FB_S3C2410) += lcd.o

nfs 32000000 192.168.1.123:/work/nfs_root/uImage; bootm 32000000

set bootargs console=ttySAC0,115200 root=/dev/nfs nfsroot=192.168.1.123:/work/nfs_root/fs_mini_mdev_new ip=192.168.1.17
nfs 32000000 192.168.1.123:/work/nfs_root/uImage_jz2440; bootm 32000000
nfs 32000000 192.168.1.123:/work/nfs_root/uImage_tq2440; bootm 32000000
nfs 32000000 192.168.1.123:/work/nfs_root/uImage_mini2440; bootm 32000000


B. 使用新内核启动


2.3 使用freetype来显示任意大小的文字
2.3.1节_数码相框_freetype理论介绍
2.3.2节_数码相框_在PC上测试freetype

在PC:
tar xjf freetype-2.4.10.tar.bz2
./configure
make
sudo make install

gcc -o example1 example1.c -I /usr/local/include/freetype2 -lfreetype -lm
gcc -finput-charset=GBK -fexec-charset=UTF-8 -o example1 example1.c -I /usr/local/include/freetype2 -lfreetype -lm
./example1 ./simsun.ttc abc

2.3.3节_数码相框_在LCD上显示一个矢量字体

交叉编译:
tar xjf freetype-2.4.10.tar.bz2
./configure --host=arm-linux
make
make DESTDIR=$PWD/tmp install

编译出来的头文件应该放入:
/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include

编译出来的库文件应该放入:
/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib

把tmp/usr/local/lib/* 复制到 /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib
sudo cp * /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib -d -rf
cp *so* /work/nfs_root/fs_mini_mdev_new/lib -d


把tmp/usr/local/include/* 复制到 /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include
cp * /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include -rf
cd /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include
mv freetype2/freetype .

arm-linux-gcc -finput-charset=GBK -o example1 example1.c -lfreetype -lm
arm-linux-gcc -finput-charset=GBK -o show_font show_font.c -lfreetype -lm


freetype/config/ftheader.h
freetype2/freetype/config/ftheader.h

 

arm-linux-gcc -finput-charset=GBK -fexec-charset=GBK -o show_font show_font.c -lfreetype -lm

2.3.4节_数码相框_在LCD上显示几行文字
a. 从左边开始显示几行文字
arm-linux-gcc -finput-charset=GBK -o show_lines show_lines.c -lfreetype -lm


b. 居中显示几行文字


百问网gif
www.100ask.net


3. 在LCD上显示任意编码的文本文件,做一个电子书

第1课第3.1节_数码相框_额外项目_电子书之效果及框架

第1课3.2节_数码相框_额外项目_电子书之代码阅读及编写

第1课3.3节_数码相框_额外项目_电子书之指针操作

第1课3.4节_数码相框_额外项目_电子书之链表操作

第1课3.5节_数码相框_额外项目_电子书之在PC上显示

ctrl+alt+shift+f1

 

下载地址:
https://launchpad.net/ubuntu/+source/svgalib/1:1.4.3-30
svgalib_1.4.3.orig.tar.gz
svgalib_1.4.3-30.debian.tar.gz
svgalib_1.4.3-30.dsc

打补丁
tar xzf svgalib_1.4.3.orig.tar.gz
tar xzf svgalib_1.4.3-30.debian.tar.gz
cd svgalib-1.4.3.orig/
for file in ../debian/patches/*.patch; do patch -p1 < $file; done

编译安装:
sudo make install // 编译出错,需要安装libx86
再 sudo make install


下载地址
http://packages.ubuntu.com/lucid/libx86-1

tar xzf libx86_1.1+ds1.orig.tar.gz
gunzip libx86_1.1+ds1-6.diff.gz
cd libx86-1.1/
patch -p1 < ../libx86_1.1+ds1-6.diff
make // 出错,修改lrmi.c,添加宏, 参考561491.patch
make
sudo make install

    运行pc端程序是报错:error while loading shared libraries:libvga.so.1:cannot open shared object file :No such file or directory 。这是个很普遍的错误,找不到共享库,但是我发现其实这个库已经安装上了,在/usr/local/lib目录下已经存在,但是程序就是没找到它

  那就表示系统不知道xxx.so 放在哪个目录下。
这个时候就要在/etc/ld.so.conf中加入xxx.so所在的目录。
 一般而言,有很多so文件在/usr/local/lib这个目录下,所以在/etc/ld.so.conf中加入/usr/local/lib这一行,可以解決此问题。加的时候直接在后面补上:/usr/local/lib。保存并退出后,还用用ldconfig命令进行更新。还要注意,这些命令如果说权限的原因的话,可以通过加sudo

sudo vim /etc/ld.so.conf

   /usr/local/lib

sudo ldconfig

这样做之后再运行就没有错误了。

 

 sudo  ./show_file -s 16 -d crt  -f ./FZYTK.ttf ./utf8.txt

 

http://security.ubuntu.com/ubuntu/pool/main//libx/libx86/
libx86_1.1+ds1.orig.tar.bz2 // 修改

sudo apt-get source libx86


4. 编写一个通用的Makefile

编译test_Makefile的方法:
a. gcc -o test a.c b.c
对于a.c: 预处理、编译、汇编
对于b.c:预处理、编译、汇编
最后链接
优点:命令简单
缺点:如果文件很多,即使你只修改了一个文件,但是所有的文件文件都要重新'预处理、编译、汇编'
效率低

b. 写Makefile
核心:规则

目标:依赖1 依赖2
命令

命令执行的条件:
i. '依赖'文件 比 '目标'文件 新
ii.没有'目标'这个文件

5. 使用多种方法支持多输入
http://cc.byexamples.com/2007/04/08/non-blocking-user-input-in-loop-without-ncurses/

http://www.groad.net/bbs/simple/?t3959.html

5.1 使用轮询方法 // CPU占用率高
实验方法:
a. insmod s3c_ts.ko
确定是哪个设备节点对应触摸屏
b.
export TSLIB_TSDEVICE=/dev/event0
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_CONFFILE=/etc/ts.conf
export TSLIB_PLUGINDIR=/lib/ts
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0

c. 较准
ts_calibrate

d. telnetd -l /bin/sh //启动telnet服务,为了登录进去观察CPU占用率

e. ./show_file -s 24 -d fb -f ./MSYH.TTF ./utf8_novel.txt

(如果失败,先kill掉冲突的进程)

f. telnet上开发板执行top命令观察


5.2 使用select,poll // CPU占用率低,适用于很多简单场合

参考:UNIX环境高级编程 I/O多路转接

监测多个文件,只要有某一个文件可读/可写/异常或超时,即返回
int select(int nfds, fd_set *readfds, fd_set *writefds,fd_set *exceptfds, struct timeval *timeout);
最大文件句柄+1 被监测是否可读的文件 超时时间
被监测是否可写的文件
被监测是否有异常的文件

5.3 使用多线程 // CPU占用率低,非常灵活
参考 Unix_Linux_Windows_OpenMP多线程编程.pdf P18 3.3.2 条件变量

实现滑动翻页:
1. 触摸点在X方向的位移差值超过x分辨率的5分之1,就翻页


gcc -o example1 example1.c -L/usr/local/lib/ -lfreetype -lm -I /usr/local/include/freetype2
gcc -finput-charset=GBK -fexec-charset=UTF-8 -o example1 example1.c -L/usr/local/lib/ -lfreetype -lm -I /usr/local/include/freetype2
gcc -finput-charset=UTF-8 -fexec-charset=UTF-8 -o example1 example1.c -L/usr/local/lib/ -lfreetype -lm -I /usr/local/include/freetype2

6.1 网络编程的简单例子
6.2 修改电子书源码支持远程打印
6.3 完善远程打印


7. libjpeg的使用
一、交叉编译libjpeg
tar xzf libjpeg-turbo-1.2.1.tar.gz
cd libjpeg-turbo-1.2.1
./configure --prefix=/work/projects/13.libjpeg/libjpeg-turbo-1.2.1/tmp/ --host=arm-linux
make
make install

二、交叉编译jpg2rgb.c
2.1
arm-linux-gcc -o jpg2rgb jpg2rgb.c -I /work/projects/13.libjpeg/libjpeg-turbo-1.2.1/tmp/include -L /work/projects/13.libjpeg/libjpeg-turbo-1.2.1/tmp/lib -ljpeg
cp jpg2rgb /work/nfs_root/fs_mini_mdev_new
cp libjpeg-turbo-1.2.1/tmp/lib/*so* /work/nfs_root/fs_mini_mdev_new/lib/ -d

2.2
把编译出来的头文件应该放入:
/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include

cd /work/projects/13.libjpeg/libjpeg-turbo-1.2.1/tmp/include
cp * /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include

把编译出来的库文件应该放入:
/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib

cd /work/projects/13.libjpeg/libjpeg-turbo-1.2.1/tmp/lib
cp *so* -d /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib

arm-linux-gcc -o jpg2rgb jpg2rgb.c -ljpeg

三、在开发板上运行


8. 大综合:实现数码相框

8.4.4 试验:
1. insmod s3c_ts.ko
2.
export TSLIB_TSDEVICE=/dev/event0
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_CONFFILE=/etc/ts.conf
export TSLIB_PLUGINDIR=/lib/ts
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0

3.
在开发板上:mkdir -p /etc/digitpic/icons
把图标文件放到开发板的/etc/digitpic/icons

4.
在开发板上运行 digitpic

8.5.1 编译安装使用最终版的数码相框
1. 交叉编译安装freetype
tar xjf freetype-2.4.10.tar.bz2
./configure --host=arm-linux
make
make DESTDIR=$PWD/tmp install

编译出来的头文件应该放入:
/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include

把tmp/usr/local/include/* 复制到 /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include
cp * /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include -rf
cd /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include
mv freetype2/freetype .

编译出来的库文件应该放入:
/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib

把tmp/usr/local/lib/* 复制到 /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib
sudo cp * /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib -d -rf

//放到根文件系统
cp *so* /work/nfs_root/fs_mini_mdev_new/lib -d

 

2. 交叉编译安装libjpeg (如果工具链中已经有libjpeg库,这步可省;否则参考前面笔记)

3. 把freetype库, libjpeg库放到根文件系统上去
//放到根文件系统
进入freetype的tmp/usr/local/lib
cp *so* /work/nfs_root/fs_mini_mdev_new/lib -d

4. 交叉编译安装tslib库
修改:
/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include/linux/input.h
#define EV_VERSION 0x010000
改为
#define EV_VERSION 0x010001

然后:参考


5. 准备运行:
a. 从windows 得到矢量字体文件MSYH.TTF, 把它放入fs_mini_mdev_new
b. 在根文件系统上建 /etc/digitpic 目录
把icons复制进去
c. insmod s3c_ts.ko
d.
export TSLIB_TSDEVICE=/dev/event0
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_CONFFILE=/etc/ts.conf
export TSLIB_PLUGINDIR=/lib/ts
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
e. ts_calibrate
f. ./digitpic /MSYH.TTF


8.5.2 完整版本的数码相框源码分析

8.5.3 改进数码相框: 支持中文
字符集和编码II: fat/msdos/vfat
http://gosubi.me/adow/2008/08/charset-coding-2-vfat/

8.5.4 课后作业及思路
1. 在'browse页面'里, 对不同后缀名的文件使用不同的图标
2. 支持其他格式的图片文件, 比如png
3. 支持鼠标
4. 'manual页面'里,点击'上一张'或'下一张'时所要显示的图片比较大, 速度有点慢: 改进它
5. 在'browse页面'里点击txt文件时, 能显示文件内容

 

 

 

BMP文件格式:
http://redwolf.blog.51cto.com/427621/229096

C语言结构体对齐
http://blog.csdn.net/shenbin1430/article/details/4292463

参考资料:
FreeType 字体引擎分析与指南
http://wenku.baidu.com/view/2d24be10cc7931b765ce155b.html

HZK16应用示例
http://wenku.baidu.com/view/0774d20c52ea551810a68768.html

点阵字库HZK12 HZK16 HZK24 ASC12 ASC16 简介 及 使用方法
http://blog.csdn.net/hongjiujing/article/details/6649618

汉字拼音、五笔、GB2312、GBK、Unicode、BIG5编码速查
http://ipseeker.cn/tools/pywb.php

在线汉字编码查询,一次查询多个汉字输入法编码及内码——快典网.htm
http://bm.kdd.cc/

BIG5编码表
http://wenku.baidu.com/view/9bb3ae01b52acfc789ebc970.html

UNICODE编码表
http://wenku.baidu.com/view/7c667f563c1ec5da50e27069.html

GB2312简体中文编码表
http://wenku.baidu.com/view/0ef57bfb04a1b0717fd5dd1a.html

hzk16的介绍以及简单的使用方法
http://hi.baidu.com/hrman/blog/item/4616bc2675ce13128a82a193.html

UTF-8
http://zh.wikipedia.org/wiki/UTF-8

getopt的用法
http://www.cnitblog.com/zouzheng/archive/2007/04/02/25034.aspx

http://www.svgalib.org/


关键字:S3C2440  数码相框 引用地址:基于S3C2440数码相框

上一篇:ubuntu18 : QEMU中新建S3C2440模拟器
下一篇:ARM Linux bootloader笔记

推荐阅读最新更新时间:2026-03-24 11:09

NiosⅡ软核处理器的SOPC技术实现数码相框设计
本文采用了基于NiosⅡ软核 处理器 的SOPC技术来实现数码相框的设计,从根本上改变了传统设计方案的不足。NiosⅡ软核嵌入式处理器是Altera公司提供的SOPC解决方案。NiosⅡ是一种可配置的16/32位RISC处理器,它结合丰富的外设、专用指令和硬件加速单元可以低成本地提供极度灵活和功能强大的SOPC系统,开发者可以根据实际需要自行整合。SOPC技术在电子设计上给出了一种同时涉及底层的硬件系统设计和相应的软件设计,在系统优化方面有了前所未有的自由度,使得从多角度、多因素和多结构层面上大幅度优化自己的设计成为可能。当电路有少量改动时,更凸现出其优势,可以延长该产品在市场上的寿命,大大提高多功能数码相框的性能。 1 系统总
[电源管理]
NiosⅡ软核处理器的SOPC技术实现<font color='red'>数码相框</font>设计
数码相框的LED背光设计
  近年来传统纸质相片相框的吸引力已日渐消退,随着数码相机和手机相机的普及,数码相框市场正方兴未艾。数码相框具有内置的扬声器和耳机,可以通过MP3功能实现动人的画面,由此我们不难预计相当比例的传统相框将被数码相框取代。此外,一旦数码相框的价格开始回落,其流行风潮必将很快到来。   正是基于上述原因,许多公司纷纷推出了最新的数码相框模型。本文将介绍美国国家半导体针对数码相框应用推出的新产品,并着重验证在每种应用中哪种产品最为有效。   美国国家半导体的许多产品已被应用在LCD偏置电源、LCD BLU(背光模组)、音频和DC/DC模块上。通常数码相框显示器的尺寸为5.6英寸、7英寸和8英寸,其中7英寸和8英寸是主流产品。较大尺寸的
[电源管理]
UCOS-II 操作系统在数码相框中的应用
1、引言 近年来,随着嵌入式技术的不断发展,各种电子产品层出不穷,对于那些具有众多功能,但按键数目无法满足要求的设备来说,选择一个好的操作系统和设计一套合理的消息处理机制,已经成为研发人员研究的一个课题。本文以此为背景,研究了UCOS-II操作系统在数码相框中的应用,详细描述了UCOS-II操作系统在ZEVIO1020双核处理器上的移植,并且根据数码相框多任务的特点,设计了一套完整的消息处理机制。实践证明,采取本文所设计的系统可以灵活的完成任务间的调度和切换。 2、系统概述 数码相框的主要特色是图片显示清晰,图片显示效果多种多样,同时还具有视频播放、音频播放、JPEG图片解码等附加功能。在本系统实现过程中主要分为六个模
[嵌入式]
具蓝牙功能的数码相框芯片设计
  CSR与其乐达科技公司联手,推出一款具有蓝牙功能的数码相框芯片参考设计。其乐达采用了CSR公司的BlueCore4-ROM,其设计目的是帮助OEM厂商在最短的时间内将产品推向市场。采用BlueCore4-ROM的数码相框不仅能够接收照片,还可通过蓝牙播放音频流媒体。   除了BlueCore4-ROM以外,其乐达还采用了CSR公司的BCHS软件(BlueCore Host Software)。该软件为OEM厂商提供了一个简单且完整的蓝牙解决方案。由于其提供了蓝牙上层协议栈,并具有智能节电功能和一个大型的蓝牙应用规范库,因此可以实现最快的上市时间和最低的成本。经过优化的BlueCore4-ROM,能够与其它无线电共存;BCHS简
[新品]
宝丽来LCD数码相框XSA-0720S方案解析
旧事物可以重新流行,商业品牌也不例外。著名的如即时成像相机公司宝丽来(Polaroid)于2001年10月提出破产申请,几年后则宣布回归。在完成与BankOne银行、Petters Group以及其他机构的金融手续之后,宝丽来的即时成像业务落入CharacterGroup公司手中,电子制造权则归伟创力(Flextronics)所有。尽管所有权和商标权的法人变更,但通过将其品牌数码相机和数码相框与DVD播放器和平板电视进行融合,宝丽来的公开亮相似乎又将焦点聚集在成像上。   随着数码相机和手机相机的普及,传统纸质相片相框的吸引力已日渐消退,数码相框市场正逐渐兴起。数码相框具有内置的扬声器和耳机,可以通过MP3功能实现动人的画面,以各
[焦点新闻]
北天星数码相框登场IIC,成本偏高市场待热
在2006 IIC上,北天星国际(Polar Star International)展示了最新推出的基于ATMEL的AT76C120的数码相框方案,它采用存储卡作为主要的存储媒介,可支持CF、MMC,SM、SD、XD-Picture、Memory Stick等众多存储卡格式。北天星的数码相框方案可播放标准及非标准的Baseline的JPEG图像,最高可支持1,600万像素,可以实现图片的自动浏览、旋转、缩放、移动等。同时,它还可播放MP3音乐。   目前市面上并没有专门针对数码相框的芯片,各方案厂商一般都采用一些通用的多媒体处理芯片来实现。“市面上流行的数码相框方案是基于亿世的芯片,亿世芯片本来是作DVD播放用的,它在处理静态图
[焦点新闻]
十四、s3c2440裸机—中断控制器
14.1 中断体系 ARM 体系的CPU 有 7 种工作模式 用户模式(usr):ARM 处理器正常的程序执行状态 快速中断模式(fiq):用于高速数据传输或通道处理 中断模式(irq):用户通用的中断处理   管理模式(svc):操作系统使用的保护模式 数据访问终止模式(abt):当数据或指令预取终止时进入该模式,可用于虚拟存储及存储保护 系统模式(sys):运行具有特权的操作系统任务 未定义指令中止模式(und):当未定义的指令执行时进入该模式,可用于支持硬件协处理器的软件仿真   可通过软件来进行模式切换,或者发生各类中断、异常时CPU自动进入相应的模式。除用户模式外,其他6种工作模式都属于特权模式,
[单片机]
十四、<font color='red'>s3c2440</font>裸机—中断控制器
S3C2440开发环境搭建(Ubuntu)
我的操作系统是 Ubuntu 1404。可以使用下面的命令查看系统的版本: cat /etc/issue 安装、配置、启动 ftp 服务 sudo apt-get install vsftpd 修改vsftpd的配置文件/etc/vsftpd.conf,将下面几行前面的“#”号去掉。 #local_enable=YES #write_enable=YES 上面第一行表示是否允许本地用户登录,第二行表示是否允许上传文件。 修改完华之后,执行以下命令重启ftp服务: sudo service vsftpd restart 安装、配置、启动 ssh 服务。 sudo apt-get install openssh-server 它的
[单片机]
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved