2014年9月9日 星期二

如何將ubuntu編譯後的執行檔案push到Android設備的/system/bin裡頭?(Permission denied)

最近在移植一款平板的G-sensor,想使用i2c tool,但該如何將ubuntu編譯後的執行檔案push到Android設備的/system/bin裡頭呢?
若直接將檔案push 到/system/bin將會遇到Read-only file system的錯誤訊息,解法如下述:

1. adb shell
2.mount -o rw,remount -t ext3 /system
3. adb push "file path & file name" to /system/bin
4. adb shell
5. cd /system/bin
6. chmod 777 i2cdetect, i2cdump, i2cget, i2cset四個檔案

接下來就可以使用i2c tool啦



2014年9月5日 星期五

I2C Tool presentation


今天來介紹一下如何在ARM base的手機或平板來Debug I2C以及I2C tool

  1. Download source code
    1. 下載源碼:
    1. 解壓源碼包:
      tar -xvf i2c-tools-3.1.0.tar.bz2
    1. 進入tools目錄
i2cdetect – 列舉I2C bus和上面所有的設備
i2cdump – 列印設備(如 codeccamera)上所有register的值
i2cget – 讀設備某個 register的值
i2cset –  設置某個register的值
  1. 編譯 I2C Tools
PS:請自行建立Compiler環境,需使用ARM Linux一般之compiler
    1. I2C Detect
arm-linux-gnueabi-gcc-4.6 -O2 -I../include -c i2cdetect.c -static -o i2cdetect.o
arm-linux-gnueabi-gcc-4.6 -O2 -I../include -c i2cbusses.c -static -o i2cbusses.o
arm-linux-gnueabi-gcc-4.6 -O2 -I../include i2cdetect.o i2cbusses.o -static -o i2cdetect
    1. I2C Dump
arm-linux-gnueabi-gcc-4.6 -O2 -I../include -c i2cdump.c -static -o i2cdump.o
arm-linux-gnueabi-gcc-4.6 -O2 -I../include -c i2cbusses.c -static -o i2cbusses.o
arm-linux-gnueabi-gcc-4.6 -O2 -I../include -c util.c -static -o util.o
arm-linux-gnueabi-gcc-4.6 -O2 -I../include i2cdump.o util.o i2cbusses.o -static -o i2cdump
    1. I2C Get
arm-linux-gnueabi-gcc-4.6 -O2 -I../include -c i2cget.c -static -o i2cget.o
arm-linux-gnueabi-gcc-4.6 -O2 -I../include -c i2cbusses.c -static -o i2cbusses.o
arm-linux-gnueabi-gcc-4.6 -O2 -I../include -c util.c -static -o util.o
arm-linux-gnueabi-gcc-4.6 -O2 -I../include i2cget.o util.o i2cbusses.o -static -o i2cget
    1. I2C Set
arm-linux-gnueabi-gcc-4.6 -O2 -I../include -c i2cset.c -static -o i2cset.o
arm-linux-gnueabi-gcc-4.6 -O2 -I../include -c i2cbusses.c -static -o i2cbusses.o
arm-linux-gnueabi-gcc-4.6 -O2 -I../include -c util.c -static -o util.o
arm-linux-gnueabi-gcc-4.6 -O2 -I../include i2cset.o util.o i2cbusses.o -static -o i2cset

  1. 串口線作業流程
    1. 插上串口線 & 將平板開機
    2. Windows裝置管理員確認Comport(下圖為COM6)   
                                                
    1. 打開Putty,利用putty登入



    1. Putty將檔案放入機器
adb push \\UBUNTU\user\course\i2c-tools-3.1.0\tools\i2cdetect /system/bin
PS:其他三個檔案皆如此

  1. USB作業流程
      1. 插上USB & 將平板開機
      2. adb tool將檔案放入機器
   

      1. 改變檔案的Mode
chmod 777 i2cdump (所有檔案皆需經此步驟
  1. 執行指令
      1. i2cdetect –l 確認此平板有那些I2C總線,下述範圍表示有3I2C總線

      1. i2cdetect -y -r 0掃描第0I2C總線

      1. i2cdump -f -y 0 0x4CDump0I2C總線Address 0x4C的所有Register

i2cget -f -y 1 0x4c 0x08
=>取得i2c bus 1,I2C address為0x4C,register 0x08之data

i2cset-f -y 1 0x4c 0x08 0x00
=>設定i2c bus 1,I2C address為0x4C,register 0x08為0x00


Appendix
I2C address: 28 (0x1C) MMA8452
I2C address: 76 (0x4C) MMA7660
I2C address: 83 (0x53) ADXL345
I2C address: 104 (0x68) MPU6050

ubuntu 12.04 LTS 無法更新,apt-get update issue

最近在架設Armcore EVB開發平台,發現ubuntu 12.04無法執行apt-get update;上網找了很多方案都失敗,最後發現一個網站的方案才讓我的ubuntu 12.04能夠update安裝包,特意介紹給大家;網址是http://note.drx.tw/2012/01/mirror.html。

另轉載方案如下述:

1. 使用更新管理員更換 mirror

1.1. 開啟「更新管理員」。

1.2. 點選「設定」按鈕。

1.3. 點選「下載自:」 一欄,並點選「其他...」。

1.4. 找到國網中心的 mirror 後點選「選擇伺服器」。

2. 使用 sed 取代 mirror


2.1. 在取代前得先找出目前使用的 mirror。
jonny@oneiric:~$ cat /etc/apt/sources.list | grep main | awk '{ print $2}' | cut -d'/' -f3 | sed -n '3P' [Enter]
tw.archive.ubuntu.com

2.2. 將 tw.archive.ubuntu.com 替換成 free.nchc.org.tw。
jonny@oneiric:~$ sudo sed -i 's/tw.archive.ubuntu.com/free.nchc.org.tw/g' /etc/apt/sources.list [Enter]