AM335x应用笔记-AM335x主板18个问题整理及解决思路 第二章(连载)

 本文基于飞凌嵌入式AM335x嵌入式ARM主板为基础讲解,系统采用Linux,以下问题已经在AM335x 主板上做了验证,通过本文您可以快速解决AM335x平台一些容易出错的地方,由于各个厂家提供的镜像不同,如您选择其他厂商ARM主板,请酌情参考使用。本次共整理了18个问题,由于内容较多分为两章讲解分享,本章分享第13-18问题解决思路。


为便于查询检索AM335x问题,小编列出目录,请根据您的需查询。

AM335x 应用笔记

1、AM335x  Linux系统自启运行Qt程序

2、AM335x Qt程序添加背景-

3、AM335x Qt界面应用程序中取消光标的方法

4、AM335x  Linux QT视频打开不能退出问题

5、AM335x 开机LOGO连续显示的方法

6、AM335x 更改Qt界面 — FORLINX字符串

7、AM335想 更改开机画面—左上角小企鹅图标

8、AM335x  生成按键设备名keypad的方法

9 、AM335X更改GPIO的方法

10、AM335x  SPI改成CAN的方法

11、AM335x 增加串口的方法

12、AM335x解决开发板触摸不灵敏问题

13、AM335x 添加应用程序到桌面的方法

14、AM335x 解决NAND erase.chip烧写错误的方法

15、AM335x 添加LCD的方法

16、AM335x 系统自动登录方法

17、AM335x 硬件看门狗开启方法

18、AM335x 修改MAC地址


注:本文所提到的镜像、源码等,请在飞凌提供的下载资料中查询。


正文开始:接上篇 https://www.forlinx.com/article-new-c22/607.html

12、解决开发板触摸不灵敏问题

问题描述:

在旧版的OK335x系列开发板触摸屏和鼠标同时使用时,触摸屏点击两次才有反应。现将解决方法分享给大家。

注:最新版的内核中已经修复了这个问题,大家可以下载最新的内核文件进行操作。

解决办法:

在内核代码中修改

diff --git a/drivers/input/mousedev.c b/drivers/input/mousedev.c

index 518b137..7ae6d21 100644

--- a/drivers/input/mousedev.c

+++ b/drivers/input/mousedev.c

@@ -974,7 +974,8 @@ static intmousedev_connect(struct input_handler *handler,

struct mousedev *mousedev;

int minor;

int error;

-

+       if(dev->name == "ft5x0x_ts")

+               return 0;

for (minor = 0; minor < MOUSEDEV_MINORS; minor++)

if (!mousedev_table[minor])

break;


13、添加应用程序到桌面的方法

本方法涉及到的目录及文件(基于AM335x开发板文件系统源文件):

forlinx/web/lighttpd/webpages/apps/

forlinx/web/lighttpd/webpages/apps/image/

forlinx/web/lighttpd/webpages/shell/

forlinx/web/lighttpd/webpages/json.txt forlinx/qt/bin/ 

 

操作步骤:

以建立 hello 为例进行说明

建立 hello

步骤 1:将所要添加的应用程序放到/forlinx/qt/bin 目录下。

 

添加目录

步骤 2:进入forlinx/web/lighttpd/webpages/apps 目录,建立 hello 文件夹。

 

建立 hello 文件夹

步骤 3:在 hello 文件中建立 .desktop 文件(如hello.desktop),当然,你也可以直接 copy 其他目录的 .desktop 文件到 hello 目录中,然后对其进行修改。hello.desktop的文件内容:如图:

如果你是 copy 其他文件进行修改的,那么红色字体是你要修改的地方

#! /usr/bin/envxdg-open    

[Desktop Entry]    

Name=Hello

GenericName=Demo App    

Icon=/forlinx/web/lighttpd/webpages/apps/images/hello-icon.png                  xec=/forlinx/web/lighttpd/webpages/shell/hello.sh   

Type=Application    

ProgramType=gui

修改完成后,保存。

步骤 4:制作一张 96x96 大小的png格式的 image,然后放到 .desktop 文件中所说的位置,即:forlinx/web/lighttpd/webpages/apps/images  并命名为 hello-icon.png(即.desktop 中所写的图片名).

制作图片

步骤 5:进入forlinx/web/lighttpd/webpages/shell 目录,copy 其中的一个 .sh文件并命名为 hello.sh(.desktop 中所写的脚本名),对其进行修改(红色字体为要修改的地方),如图是修改后的

文件内容及要修改的地方:

#!/bin/sh

if test -e /dev/fb0; then

width=`fbset | grep 'geometry' | awk '{print $2}'`

height=`fbset | grep 'geometry' | awk '{print $3}'`


let height=height-38

geo=`echo $width\x$height+0+0`

fi

pidofmatrix_gui> /dev/null 2>&1

if [ $? == 0 ]

then

         /forlinx/qt/bin/hello -geometry $geo $*

else 

export TSLIB_TSDEVICE=/dev/input/touchscreen0

export QWS_MOUSE_PROTO=Tslib:/dev/input/touchscreen0

/forlinx/qt/bin/hello -qws -geometry $geo $*

fi 

其实就是将红色字体的地方修改为所要添加的应用程序的名字。

步骤 6:进入/ forlinx/web/lighttpd/webpages/目录下,修改 json.txt 文件。在文件末尾添加这些内容(copy 前面的内容,然后在进行修改): {"Name":"Hello","Order":999,"Icon":"apps\/images\/hello-icon.png","Type":"applica tion","Exec":"\/forlinx\/web\/lighttpd\/webpages\/shell\/hello.sh","ProgramType":" gui","Description_Link":-1,"Lock":-1}  修改json.txt 文件

然后保存。

OK,要修改的就这些,接下来,重新制作文件系统镜像,然后烧写并启动AM335x主板,你就可以看到自己的应用程序已经添加上去了。


14、解决NAND erase.chip烧写错误的方法

问题:AM335x系列产品烧写Linux时出现NAND erase.chip :device 0 whole chip 之后,不能进行批量烧写和nand启动

解决办法:

第一步:参考手册中SD烧写卡制作步骤制作一张Win CE的烧写卡

第二步:拨码开关拨到SD卡烧写状态,开机,在终端上会出现文后打印信息,打印到Flash format complete!即可;


15、添加LCD的方法

以AM335x主板添加10.1吋屏为例

uboot 部分:

uboot-2011-09/drivers/video/da8xx-fb.c中

仿照其他屏幕的时钟参数结构体,按照屏体手册,添加10.1吋屏的结构体如下:

static struct da8xx_panel g_panel_11 = {

.name = "NHD-10.1-ATXI#-T-1",

.width = 1024,

.height = 600,

.hfp = 28,

.hbp = 158,

.hsw = 136,

.vfp = 3,

.vbp = 28,

.vsw = 5,

.pxl_clk = 64000000,

.invert_pxl_clk = 0,

};

 

在void *video_hw_init(void)函数中增加该结构体的判断选择语句,如下

else if(!strcmp(ss,"1024x600-11"))

pp = &g_panel_11;

如何在uboot阶段选择添加的10.1吋屏,这里有两种方法:

1、将其设置为默认的屏幕参数

在uboot-2011-09/include/configs/ok335x.h,修改环境变量配置,如下

#if 1

#define CONFIG_EXTRA_ENV_SETTINGS \

CON \

"screentype=R\0"\

"screensize=1024x600-11\0"\

"calibrate=Y\0"\

"laohua=N\0"\

 

2、将该屏幕添加到uboot菜单中,供选择使用

修改uboot-2011-09/common/cmd_scr.c,仿照其他选项,添加10.1吋屏的选项,如下:

intscreen_size_menu()

{

char c;

 

do

{

printf("current screen size is `%s`\n",getenv("screensize"));

printf("AAAxAAA-B means Binch screen with AAAxAAA pixels\n");

printf("---------------------screen type----------------------\n");

printf("0 -- exit to upper menu\n");

printf("1 -- 480x272-4\n");

printf("2 -- 800x480-5\n");

printf("3 -- 800x480-7\n");

printf("4 -- 800x600-8\n");

printf("5 -- 800x600-10\n");

printf("6 -- 1280x720-vga\n");

printf("7 -- 1024x768-vga\n");

printf("8 -- 800x600-vga\n");

printf("9 -- 320x240-3\n");

printf("a -- 1024x600-11\n");

printf("------------------------------------------------------\n");

 

switch(c)

{

case '0':

return 0;

break;

case '1':

setenv("screensize","480x272-4");

break;

case '2':

setenv("screensize","800x480-5");

break;

case '3':

setenv("screensize","800x480-7");

break;

case '4':

setenv("screensize","800x600-8");

break;

case '5':

setenv("screensize","800x600-10");

break;

case '6':

setenv("screensize","1280x720-vga");

break;

case '7':

setenv("screensize","1024x768-vga");

break;

case '8':

setenv("screensize","800x600-vga");

break;

case '9':

setenv("screensize","320x240-3");

break;

case 'a':

setenv("screensize","1024x600-11");

break;

内核部分:

注意:uboot会给内核传递屏幕参数,注意屏幕参数设置一致,否则显示不正常。

kernel-3.2/arch/arm/mach-omap2/ board-am335xevm.c

添加屏幕的宏定义,如下:

#define SCREEN_TYPE_R 0

#define SCREEN_TYPE_C 1

#define SCREEN_SIZE_800X480_5  0

#define SCREEN_SIZE_800X480_7  1

#define SCREEN_SIZE_800X600_8  2

#define SCREEN_SIZE_480X272_4  3

#define SCREEN_SIZE_800X600_10 4

#define SCREEN_SIZE_1280X720_vga 5

#define SCREEN_SIZE_1024X768_vga 6

#define SCREEN_SIZE_800X600_vga 7

#define SCREEN_SIZE_1024X600_11 8

 

类比其他屏幕添加结构体如下:

struct da8xx_lcdc_platform_data NHD_1024600MF_ATXI_pdata_11 = {


.manu_name              = "NHD",

.controller_data        = &lcd_cfg,

.type                   = "NHD-10.1-ATXI#-T-1",

};

 

在static void lcd_init(intevm_id, int profile)函数中增加该结构体的判断选择语句,如下:

static void lcd_init(intevm_id, int profile)

{

......

else if(screen_size == SCREEN_SIZE_1024X768_vga)

lcdc_pdata = &NHD_1024768MF_ATXI_pdata_vga;

else if(screen_size == SCREEN_SIZE_1024X600_11)

lcdc_pdata = &NHD_1024600MF_ATXI_pdata_11;

else if(screen_size == SCREEN_SIZE_640X480_5)

    lcdc_pdata = &NHD_640480MF_ATXI_pdata_5;

......

 

kernel-3.2/drivers/video/da8xx-fb.c

在static struct da8xx_panel known_lcd_panels[]中,仿照其他屏幕,按照屏体手册添加10.1吋屏的时钟参数,如下:

[14] = {

.name = "NHD-10.1-ATXI#-T-1",

.width = 1024,

.height = 600,

.hfp = 28,

.hbp = 158,

.hsw = 136,

.vfp = 3,

.vbp = 28,

.vsw = 5,

.pxl_clk = 64000000,

.invert_pxl_clk = 0,

},

该结构体的屏幕时钟参数会传给板级文件的中的10.1吋屏的结构体,最终传递给lcd初始化函数。

文件系统:

rootfs/etc/init.d/qt.sh

需要在qt系统的启动脚本中增加与屏体尺寸对应的环境变量,如下:

if [ $FB_SIZE = "800,1200" ]; then

export QWS_SIZE=800x600

elif [ $FB_SIZE = "1280,1440" ]; then

export QWS_SIZE=1280x720

elif [ $FB_SIZE = "1024,1536" ]; then

export QWS_SIZE=1024x768

else

export QWS_SIZE=800x480 /*默认为800x480*/

fi

export QWS_SIZE=1024x600


16、系统自动登录方法

系统启动后自动登录root账户

本次更新解决不能使用ctrl+c。

 

将inittab中 

#S:2345:respawn:/sbin/getty 115200 ttyO0

改为如下

S2:2345:respawn:/sbin/getty -n  -l /usr/sbin/autologin 115200 ttyO0

并将autologin   放到/usr/sbin/ 目录下。


17、硬件看门狗开启方法

1、cpu外置看门狗开启方法

修改 /etc/init.d/qt.sh 文件,添加

/usr/sbin/sp706p_wdt on &

2、cpu自带看门狗开启使用方法

修改 /etc/init.d/qt.sh 文件,添加

/forlinx/bin/watchdogtest&


18、修改MAC地址

此问题针对基于于AM335x设计充电桩计费控制单元

1.充电桩的资产文件一定要先拷贝出来。

2.确认原来核心板的MAC地址

root@ok335x:~# ifconfig

确认原来核心板的MAC地址 

其中eth0的MAC地址是:04:A3:16:F9:AF:99

同理:eth1的MAC地址是08:90:90:90:90:90

3.在新的板子的文件系统修改MAC地址

root@ok335x:~# cd /etc/init.d/

root@ok335x:/etc/init.d# vi rcS

 

修改MAC地址 

在以下添加代码:

trap ":" INT QUIT TSTP

#

#       Call all parts in order.

#

ifconfig eth0 down

ifconfig eth1 down

ifconfig eth0 hw ether 04:A3:16:F9:AF:99

ifconfig eth1 hw ether 08:90:90:90:90:90

ifconfig eth0 up

ifconfig eth1 up

exec /etc/init.d/rcS

退出保存

root@ok335x:/etc/init.d#sync

4.断电重启

断电重启重启 

重启成功