[分享]TWM_T1有關app2sd失敗的解決方式--含SD卡



贊助商連結


purk
2010-10-22, 08:58 PM
再次感謝actt兄提供的app2sd

目前測試了20幾張SD卡在T1上的app2sd

發現了一些問題

1.app2sd內放的fdisk 實際上'可能'不支援16G以上的SD卡

因為使用APP2SD內建的partition分割選項去分割

會出現

E:error in /sbin/part_sd.sh (Status 1)

的錯誤


而實際使用adb去連接手機執行fdisk

會有2種情況出現

一個是正確抓到起始磁柱 但是分割寫入並格式化後 android反而是抓到ext2的分割區(理論上不可能抓到partiton2)

一個則是先fdisk完後用app2sd的partition工具去還原成單一partition 之後再用fdisk去抓 這時候出現錯誤的起始磁柱

總之最後16g以上的sd卡都要靠gdisk來分割ext2

此外關於sd卡影響app2sd的部份

也有部份解決方式(前提是T1要可以抓的到的卡)

我發現app2sd失敗的卡

可以使用sandisk或者Transcend提供的format軟體來完整格式化後

1.可以小部份提昇sd卡的寫入讀取效能

2.app2sd比較容易成功

3.如果app2sd剛開始失敗 但是進入system/sd資料夾有看到app等資料夾

那請到data資料夾 將app等相關檔案刪除 把有.ori的資料夾重新命名 取消.ori

然後回到app2sd畫面 先remove app2sd 之後接著在app2sd


4.如果app2sd剛開始失敗 但是進入system/sd資料夾有看到app等檔案

那請到data資料夾 將app等相關檔案(或資料夾)刪除 把有.ori的資料夾重新命名 取消.ori

然後回到app2sd畫面 先remove app2sd 之後接著在app2sd

這樣基本上都可以成功的APP2SD



謝謝

贊助商連結


purk
2010-10-23, 02:52 AM
補充一點東西

或許可以把app2sd加入啟動流程

提早mount上sd卡

[轉貼 ]Android 啟動流程: Init.c
http://embeddeder.spaces.live.com/blog/cns!8006E36532087D51!159.entry

Android 啟動流程: Init.c 閱讀筆記
Androidkernel啟動后執行Init初始化,代碼在system/core/init中。

- 創建/dev /proc /sys 目錄,創建/dev/pts目錄(偽終端)和/dev/socket,并分別mount
- 創建空設備節點,創建kmsg設備節點,初始化log
- 解析init.rc
- 讀取保存在/proc/cmdline中的kernel啟動參數:
- qemu
- androidboot.console
- androidboot.mode
- factory
- factory2
- androidboot.serialno
- androidboot.baseband
- androidboot.carrier
- androidboot.bootloader
- androidboot.hardware
- 讀取hardware信息,如果cmdline中沒有指出則到/proc/cupinfo中找
- 解析/init.“hardware信息”.rc
- early-init
- 設備初始化,coldboot /sys/class /sys/block /sys/devices,將這些目錄下的uevent文件找出,并使kernel重新生成那些在init的設備管理器開始前的設備添加事件。
- 初始化property,從/default.prop中讀取property。
- 如果ro.debuggable為1,則初始化組合鍵(keychord)監聽
- 打開console,如果cmdline中沒有指定console則打開默認的/dev/console
- 讀取/initlogo.rle,是一張565 rle 壓縮的位圖,如果成功則在/dev/fb0顯示Logo,如果失敗則將/dev/tty0設為TEXT模式并打開/dev/tty0,輸出文本的ANDROID字樣。
- 判斷cmdline 中的參數:
- 如果 bootmode為
- factory,設置ro.factorytest值為1
- factory2,設置ro.factorytest值為2
- 其他的設ro.factorytest值為0
- 如果有serialno則設置ro.serialno,否則為""
- 如果有bootmod則設置ro.bootmod,否則為"unknown"
- 如果有baseband則設置ro.baseband,否則為"unknown"
- 如果有carrier則設置ro.carrier,否則為"unknown"
- 如果有bootloader則設置ro.bootloader,否則為"unknown"
- 設置ro.hardware
- 設置ro.version
- 執行所有觸發標識為init的action
- 開始property服務,讀取一些property文件,這一動作必須在前面那些ro.foo設置后做,以便/data/local.prop不能干預到他們。
- /system/build.prop
- /system/default.prop
- /data/local.prop
- 在讀取默認的property后讀取presistent propertie,在/data/property中
- 為sigchld handler創建信號機制
- 確認所有初始化工作完成
- device_fd(device init 完成)
- property_set_fd(property server start 完成)
- signal_recv_fd (信號機制建立)
- 執行所有觸發標識為early-boot的action
- 執行所有觸發標識為boot的action
- 基于當前property狀態,執行所有觸發標識為property的action
- 注冊輪詢事件:
- device_fd
- property_set_fd
-signal_recv_fd
-如果有keychord,則注冊keychord_fd
- 如果支持BOOTCHART,則初始化BOOTCHART
- 進入主進程循環:
- 重置輪詢事件的接受狀態,revents為0
- 查詢action隊列
- 重啟需要重啟的進程
- 輪詢注冊的事件
- 如果signal_recv_fd的revents為POLLIN,則得到一個信號,獲取并處理
- 如果device_fd的revents為POLLIN,調用handle_device_fd
- 如果property_fd的revents為POLLIN,調用handle_property_set_fd
- 如果keychord_fd的revents為POLLIN,調用handle_keychord