AM335x應用筆記-AM335x主板18個問題整理及解決思路 第二章(連載)

原創 2020-12-22 16:53:00 AM335x
 本文基于飛凌嵌入式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地址


注:本文所提到的鏡像、源碼等,請在飛凌提供的下載資料中查詢。


正文開始:接上篇 http://www.tkbv.cn/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.斷電重啟

斷電重啟重啟 

重啟成功 



相關產品 >

  • FET335xD核心板

    飛凌AM335系列核心板基于TI RM Cortex-A8 架構 AM335x 微處理器設計,AM335x核心板整板尺寸47*71mm;AM335X核心板芯片全部采用工業級用料;AM335x核心板引腳豐富,引出200pinCPU引腳,原生支持6路UART;AM335x核心板支持市面上主流的操作系統,Linux-RT、Linux3.2。更多AM335x系列概述,AM335處理器特點請聯系在線客服
    了解詳情
    FET335xD核心板
  • OK335xD開發板

    飛凌AM335x開發板已經推出幾年,經過行業檢測,穩定性得到肯定。多年行業積累,AM335x的解決方案涉及各行各業,歡迎進店咨詢。飛凌AM335x開發板基于TI Cortex-A8 AM335x CPU設計開發,主頻800MHz,支持Linux、RTLinux。AM335x開發板工業級寬溫,配合豐富的外設接口,適用于各種惡劣環境應用。 了解詳情
    OK335xD開發板
  • FET335xS核心板

    AM335X是TI(德州儀器)基于 ARM Cortex-A8內核的AM335X微處理器在圖像、圖形處理、外設和諸如 EtherCAT 和 PROFIBUS 的工業接口選項方面進行了增強。飛凌嵌入式提供AM335x核心板,具有小尺寸模塊穩定性高等優點,AM335x核心板接口資源多,滿足硬件開發要求;AM335x工業級芯片10年生命周期,供貨有保障。更多AM335x系列概述,AM335x處理器特點,歡迎致電咨詢。 了解詳情
    FET335xS核心板
  • OK335xS開發板

    AM335X系列包括AM3352處理器、AM3354、AM3356、AM3357、AM3358、AM3359,都可工作在800Mhz的速度。同時支持4個操作系統 Linux、RTLinux實時操作系統,,在圖像、圖形處理、外設和諸如 EtherCAT 和 PROFIBUS 的工業接口選項方面進行了增強。飛凌OK335xS開發板基于AM335x處理器開發,主頻800MHz,郵票孔封裝,體積小。根據AM335x的性能及功能,飛凌推薦了非常多的解決方案分享。

    保定飛凌嵌入式專注AM335x,am335x 開發板,TI AM335x 等ARM嵌入式核心控制系統研發、設計和生產,是AM335x,335x開發板,TI AM335x 提供者, AM335x 系列產品現已暢銷全國,歡迎咨詢!

    了解詳情
    OK335xS開發板

推薦閱讀 換一批 換一批