在ARM上執行TinyX的乙個問題

2021-04-02 02:31:53 字數 1684 閱讀 1664

最近在arm

上折騰tinyx

,花三天時間終於編譯過去了,可是板子上一執行,就莫名其妙的宕機。

開始以為是驅動的問題,經過除錯,發現在初始化時,進入函式

createrootcursor

後tinyx

就玩完,一想,沒有道理啊,

cursor

字型都存在,不可能建立不了

cursor

啊。進一步分析,在函式

shadowgetimage

裡呼叫unwrap

,執行該操作之後,

pscreen->getimage

就為null

,看了看

unwrap

的實現,原來它只是把

pscrpriv

和pscreen

的函式指標

getimage

對調了一下,而

pscrpriv

的getimage

是null

,所以交換之後

pscreen->getimage

就為null

。不會pscrpriv

沒初始化成功吧?於是在

shadowsetup

設定了乙個斷點,單步跟蹤了整個函式,初始化過程完全正確。

百思不得其解,即然初始化時是對的,那一定是中途被修改了,難道

tinyx

也有記憶體溢位的問題?在pc

上和板子上對比除錯,在

arm板子上,進入

shadowgetimage

時,shadowscrprivateindex

的值是0

,而pc

上的值是

5。奇怪?難道真的被我估中了?

想使用gdb

的watch

功能監視

shadowscrprivateindex

,不行,原來

arm-linux-gdb

不支援watch

功能,只好使用

gdb的

display

功能。經過反覆的試,最後發現執行

完後,shadowscrprivateindexr

的值就變為

0了,又分析全域性變數的分布情況,了解

kdkeymap

和shadowscrprivateindex

的位置連在一起,猜測是訪問

kdkeymap

越界了,繼續除錯,事實證實不出我所料。

想了想,

tinyx

裡不會有這種錯誤吧,況且

pc上是執行得很正常啊,仔細看了變數的定義和相關的訪問**,沒有發現問題。只是發現在乙個迴圈裡,

i的值竟達到了

248,與

pc上的有點不同,檢查了一點迴圈的條件,估計是

nr_keys

值在pc

上和arm

上有所不同。找到該巨集的定義,它是在

linux

的keyboard.h

裡定義的。

arm linux

用的是2.69

核心,

其值定義為

256,而

pc上執行的是

2.4核心,裡定義的是

128。在

arm上它,就越界了,而

pc上正常。

(tinyx

用的是xfree 4.5)

在arm上搭建flask執行環境

flask是乙個簡單的實用的web服務,由於其比較小巧,對於一些簡單需求的服務是比較方便的,如restful api。由於flask是乙個在python上執行的庫,所以想要執行flask,那麼乙個python庫是必不可少的,那麼就需要交叉編譯乙個python庫,可以參考 交叉編譯python 2.7...

Linux 在乙個命令列上執行多個命令

對於單個命令執行我想大多數人都是明了的,也就是在乙個命令列上執行一條命令。那對於在一行上執行多個命令怎麼辦呢,其實也很簡單,只需在各命令之間加上特殊命令符號,我們常規使用到的有3個特殊命令符號。1.如果被分號 所分隔的命令會連續的執行下去,就算是錯誤的命令也會繼續執行後面的命令。root local...

Linux 在乙個命令列上執行多個命令

原文出處 對於單個命令執行我想大多數人都是明了的,也就是在乙個命令列上執行一條命令。那對於在一行上執行多個命令怎麼辦呢,其實也很簡單,只需在各命令之間加上特殊命令符號,我們常規使用到的有3個特殊命令符號。1.如果被分號 所分隔的命令會連續的執行下去,就算是錯誤的命令也會繼續執行後面的命令。root ...