1. 程式人生 > >高通平臺工作總結(一)

高通平臺工作總結(一)

1. svn 獲取工程程式碼命令:svn co svn+ssh://10.20.30.18/svn-repos/msm8916/branches/LA1.1-CS-r113502.2

2. 如何確定那些dtsi檔案實際會用到。
         修改程式碼 kernel/arch/arm/kernel/devtree.c中的函式 setup_machine_fdt 中以下這行:
         pr_info("Machine: %s, model:%s\n", mdesc_best->name, model); 為
         pr_err("Machine: %s, model:%s\n", mdesc_best->name, model);
         並在 kenel log中查詢關鍵字"Machine", 找到對應的module。
         在目錄 kernel/arch/arm/boot/dts下用以下命令查詢dts  檔案
         grep model *.dts | grep "8916 MTP" ,其中 "8916 MTP" 就是以上 kernel log中找到的 model 名字。
         用命令 grep include XXXX 查詢 dtsi 檔案,XXXX就是 上步查詢到的dts 檔案。

3. 解決JAVA 版本不對導致編譯 java 原檔案出錯的問題。
      Ubuntu 原先安裝的JAVA版本是 1.6.0_24, 編譯android 4.4 時導致編譯JAVA檔案出錯。
      需要重新安裝版本為1.6.0_26版本的JAVA,方法如下:
      (1). 把sun-java-jdk拷貝到unbuntu,給該目錄下的3個檔案新增可執行許可權。
(2). 用以下命令安裝:
     sudo dpkg -i sun-java6-bin_6.26-0squeeze1_amd64.deb sun-java6-jdk_6.26-0squeeze1_amd64.deb sun-java6-jre_6.26-0squeeze1_all.deb

4. 除錯質量不好的SD卡一般方法:
      (1). 開啟巨集 MMC_DEBUG 可以檢視以下LOG資訊。
      (2). 在函式 mmc_init_card 中每個傳送命令之間加延時。
      (3). 增加命令 cmd->cmd_timeout_ms 與 資料 data->timeout_ns 的超時時間。
      (4). 增加GPIO的驅動能力,比如修改 msm8916.dtsi, msm8916-pinctrl.dtsi, 增加GPIO的驅動電流。

5. 獲取工程程式碼,編譯出錯,錯誤資訊:zip error: Invalid command arguments (cannot repeat names in zip file)
   原因:svn 版本較低,需要升級 svn 版本到 1.7.9
   解決方案:How to build svn 1.7.9,any puzzle pls contact zhanghongliang:
     1, download subversion-1.7.9.tar.bz2 from http://subversion.apache.org/download/
2, download apr-1.4.6.tar.bz2 & apr-util-1.5.2.tar.bz2 from http://apr.apache.org/download.cgi
3, download sqlite-autoconf-3071602.tar.gz from http://www.sqlite.org/download.html
4, un-tar sqlite-autoconf and make install it:
 cd  sqlite-autoconf-3071602
./configure
sudo make
sudo make install
5, un-tar apr-1.4.6 apr-util-1.5.2 into subversion folder, rename them to apr & apr-util
6, run ./configure, make, make install

6. 解決Ubuntu 下 adb 許可權問題。
       連線手機到 Ubuntu 系統,adb devices 提示:
       List of devices attached 
                  ????????????    no permissions
這是因為訪問adb裝置需要root許可權。
用以下命令修改 adb 許可權可以解決問題。
sudo chown root:root adb
sudo chmod a+x adb
sudo chmod a+s adb
adb kill-server

7. 用QCAT工具修改手機來電鈴聲音量。
      (1). 線上修改
           a. 開啟QACT,點選 connect to phone, 連上手機。
           b. 在 Audio use case 攔選 Audio PlayBack, Device us case 選 SPKR_PHONE_MONO
           c. 在 CODEC_GAIN 欄選相應的增益值,比如9DB
           d. 在手機端的設定選單的鈴聲音量調節裡面可以確認調整後的結果。
           e. 可以在file選單中把結果儲存為檔案。 
      (2). 離線修改檔案,把改後的檔案push 到手機
           a. 開啟QACT, 電擊 Open File
           b. 按以上b,c步驟修改增益值。
           c. 在 file 選單中儲存檔案結果。
           d. 用adb 命令把結果檔案 QRD_Speaker_cal.acdb push 到目錄 /etc/acdbdata/QRD 下。

8. 解決 Ubuntu 系統上 VM VirtualBox 虛擬機器識別USB裝置問題。
         需要修改組配置檔案 /etc/group, 把使用者加到組 vboxusers 裡面去。
         比如:vboxusers:x:126:topwise,fuyongming
         vboxsuers是虛擬機器的組,fuyongming是使用者。

9. 把RAMDUMP抓到SD卡。
          1. 確認2個巨集是否定義在boot_proc程式碼中, FEATURE_BOOT_RAMDUMPS_TO_SD_CARD, SD_PATH
          2. 在SD的根目錄下建立檔案 rdcookie.txt
          3. 模擬一個宕機條件,可以抓取RAMDUMPS,抓取的RAMDUMPS放在SD卡根目錄的數字標號的目錄下,抓完RAMDUMPS後手機自動重啟。

10. 解析RAMDUP命令:
 python ramparse.py --vmlinux /home/fuyongming/share/ramdump/1/vmlinux --auto-dump /home/fuyongming/share/ramdump/1 --gdb-path /usr/bin/gdb --nm-path  /usr/bin/nm --print-rtb
輸出所有資訊
python ramparse.py --vmlinux /home/fuyongming/share/ramdump/1/vmlinux --auto-dump /home/fuyongming/share/ramdump/1 --gdb-path /usr/bin/gdb --nm-path  /usr/bin/nm -x
把結果輸出到一個目錄,比如目錄 dumpresult
python ramparse.py --vmlinux /home/fuyongming/share/ramdump/1/vmlinux --auto-dump /home/fuyongming/share/ramdump/1 --gdb-path /usr/bin/gdb --nm-path /usr/bin/nm -x -o dumpresult

11. 通過 adb 發命令來觸發 kernel panic 抓ramdump
    adb shell
    echo c > /proc/sysrq-trigger
    
    設定 ramdump 屬性為1,才能抓ramdump
    setprop persist.sys.dload.enable 1
    
    通過QXDM模擬宕機抓DUMP,連上QXDM, 在command 裡面輸入以下命令:
    send_data 75 37 03 00
    
    可以用QPST Configuration 來抓RAMDUMP
    RAMDUMP儲存在目錄 C:\Documents and Settings\All Users\Application Data\Qualcomm\QPST\Sahara\ 下.