<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                Freescale IMX6的燒寫方式在Windows下面一般使用MFGTools,但是TQ提供的MFGTools在Windows 10下面無法工作,USB的驅動不正常。于是想到Linux下面的燒寫方式,結果一樣出現問題,且因為TQ沒有提供一些燒寫程序的源碼,因此無法更改與調試。因此TQ提供的兩種燒寫Android的方式都無法使用了,加之前面博文中,我也嘗試使用NFS來啟動,也沒有達到需要的效果,因此這篇文章說一下自己原創的直接制作SD卡來啟動Android。 本文默認大家很熟悉Linux與Android的啟動流程,如果不是很熟悉可以先看看我的分享:[Linux啟動流程 關于initrd與initramfs的區分及其發展歷程](http://blog.csdn.net/sy373466062/article/details/50325047) Linux系統下面使用 SD卡燒寫Android的嘗試:這個是TQ給出的方法不可行,可以跳過,直接到下面的分區mount開始看 因為這個方案是TQ給出的,所以我嘗試的去使用了一下,結果無法使用,因此也寫下來,希望其他人不用會去浪費時間,或者幫忙指出我的操作哪里不對。 按照官方的說法制作好了燒寫用的SD卡,并且從SD卡啟動之后,rcS中會自動去mount SD卡,然后解析EmbedSky.ini配置文件,但是解析的結果似乎不正確,以下是啟動之后看到了rcS內容: ~~~ # cat /etc/init.d/rcS #!/bin/sh PATH=/sbin:/bin:/usr/sbin:/usr/bin runlevel=S prevlevel=N umask 022 export PATH runlevel prevlevel # # Trap CTRL-C &c only in this shell so we can interrupt subprocesses. # mount -a mkdir -p /dev/pts mount -t devpts devpts /dev/pts mount -n -t usbfs none /proc/bus/usb echo /sbin/mdev > /proc/sys/kernel/hotplug mdev -s mkdir -p /var/lock #modprobe s5pv210_wm8960 #modprobe ds18b20 #modprobe rt5370sta hwclock -s EmbedSky_wdg & ifconfig lo 127.0.0.1 net_set & /etc/rc.d/init.d/netd start /etc/rc.d/init.d/httpd start #InputAdapter #pda & /bin/hostname -F /etc/sysconfig/HOSTNAME autoDownload [root@EmbedSky /]# ~~~ 步驟非常直接,配置好各種需要的材料之后,直接調用一個可執行的ELF程序autoDownload,然后就沒有反應了,使用ps命令也無法看到有此進程在工作。 ## 分區mount 前面的博客([Freescale IMX6 Android NFS啟動問題匯總](http://blog.csdn.net/sy373466062/article/details/50208247))中提到了Android的啟動過程,其中有一個步驟是mount各個分區,這個分區的mount list有一個和Linux 發行版類似的配置文件,IMX6的這個文件是fstab.freescale,其內容如下: ~~~ # Android fstab file. #<src> <mnt_point> <type> <mnt_flags and options> <fs_mgr_flags> # The filesystem that contains the filesystem checker binary (typically /system) cannot # specify MF_CHECK, and must come before any filesystems that do specify MF_CHECK /devices/platform/sdhci-esdhc-imx.1/mmc_host/mmc1 /mnt/extsd vfat defaults voldmanaged=sdcard:auto /devices/platform/fsl-ehci /mnt/udisk vfat defaults voldmanaged=sdcard:auto /dev/block/mmcblk0p5 /system ext4 rw wait /dev/block/mmcblk0p4 /data ext4 nosuid,nodev,nodiratime,noatime,nomblk_io_submit,noauto_da_alloc,errors=panic wait,encryptable=footer /dev/block/mmcblk0p6 /cache ext4 nosuid,nodev,nomblk_io_submit wait /dev/block/mmcblk0p7 /device ext4 rw,nosuid,nodev wait /dev/block/mmcblk0p1 /boot emmc defaults defaults /dev/block/mmcblk0p2 /recovery emmc defaults defaults /dev/block/mmcblk0p8 /misc emmc defaults defaults ~~~ 其中各個分區的信息可以參考這篇文章:[安卓系統分區介紹](http://cn.club.vmall.com/thread-985489-1-1.html),下面是我給出自己的理解,不保證準確: - /system是system.img對應的partition - /boot存放的應該是boot.img文件 - /recovery放recovery.img文件,手機進入recovery模式的時候使用 - /data分區,存放的是用戶配置信息,以及安裝的用戶程序 - /cache分區,就是我們平常刷手機的時候雙清中的一個分區,放一些程序運行過程中的cache - /device分區,一些設備特有文件的配置或者資源文件,例如可能是fireware,這個在標準的Android中沒有 對于我們而已,要制作一個啟動用的SD卡,我們需要創建所有Android系統必須的分區,同時將對應的文件放進去,以上分區只有recovery分區可以不需要,因為我們不會進入到recovery模式中去,因此,我們第一步就是對SD卡分區。 ## 對SD卡分區 可以使用Gparted GUI圖形化軟件來進行分區,我使用的是4GB的SD卡,分區如下: ![](https://box.kancloud.cn/2016-05-05_572afc992274f.jpg) 注意后面的擴展分區,在新建分區的時候需要選擇擴展分區類型而不是主分區,因為MBR格式的分區表只能有4ge主分區,但是我們需要的分區數目遠大于4個。注意第一個分區(label為init的分區)是我額外添加的一個分區,原生中沒有。 ## 拷貝文件到分區 文件拷貝如下: - root下面的文件 --> ?init分區 - system下面的文件 --> system分區 更改fstab配置文件 因為TQ提供的Android編譯出來之后,默認是燒寫到eMMC中的,而我們使用的是SD卡,因此mmc的設備號是不一樣的,同時根據: - eMMC與SD卡的特性,eMMC的初始化比SD卡快 - 在Makefile中更靠前,因此init段在更前面,因此會更快的運行init 因此,eMMC在TQIMX6Q中是mmc0,而SD卡是mmc1。 另外也可以在啟動之后,拔插SD卡來確認,拔掉的時候會有類似下面的提示,也可以確定SD卡的名稱: ~~~ mmc1 removed ~~~ 然后我們就可以更改fstab(就是在out/target/XXX/init中的fstab.freescale)了,將里面的mmc0改成mmc1,同時將各個分區變更一下,例如SD卡掛載到了/media/init下面,那么可以使用 gvim /media/init/fstab.freescale命令來修改,如下: ~~~ root@sabresd_6dq:/ # cat /fstab.freescale # Android fstab file. #<src> <mnt_point> <type> <mnt_flags and options> <fs_mgr_flags> # The filesystem that contains the filesystem checker binary (typically /system) cannot # specify MF_CHECK, and must come before any filesystems that do specify MF_CHECK /devices/platform/sdhci-esdhc-imx.1/mmc_host/mmc1 /mnt/extsd vfat defaults voldmanaged=sdcard:auto /devices/platform/fsl-ehci /mnt/udisk vfat defaults voldmanaged=sdcard:auto /dev/block/mmcblk1p2 /system ext4 rw wait /dev/block/mmcblk1p3 /data ext4 nosuid,nodev,nodiratime,noatime,nomblk_io_submit,noauto_da_alloc,errors=panic wait,encryptable=footer /dev/block/mmcblk1p5 /cache ext4 nosuid,nodev,nomblk_io_submit wait /dev/block/mmcblk1p6 /device ext4 rw,nosuid,nodev wait root@sabresd_6dq:/ # ~~~ 注意結合前面的GParted分區圖示,根據自己的實際情況填寫。這里配置了/system,/data,/chace與/device分區; 這些就夠了。 修改完成后,保存并sync,然后將SD卡查到機器上面。 如果沒有更改這個fstab,那么將會在下面的log后沒有任何輸出: ~~~ Freeing init memory: 236K ~~~ 將這些拷貝操作,與fstab文件打包放到了csdn,供參考,下載鏈接:[imx6 手動制作Android啟動用SD卡腳本與fstab](http://download.csdn.net/detail/sy373466062/9343265) ? ## 使用SD卡啟動Android 我們已經制作好了啟動Android的SD卡,還記得前面博客說道的Android啟動順序嗎? 由這個順序,我們可以使用下面這些命令從uboot來啟動kenrel與Android: ~~~ set serverip 192.168.2.100;set ipaddr 192.168.2.111; set bootargs 'rootwait console=ttySAC0,115200n8 root=/dev/mmcblk1p1 debug ignore_loglevel init=/init vmalloc=400M androidboot.console=ttySAC0 androidboot.hardware=freescale video=mxcfb0:dev=hdmi,1280x720MM@60,if=RGB24,bpp=32 video=mxcfb1:off video=mxcfb2:off fbmem=48M' tftp 0x10800000 192.168.2.100:imx6/uImage;bootm 0x10800000 ~~~ 其中需要注意的是'root='參數,這個是以前不一樣的地方,同時添加了rootwait,等待SD卡Probe。 啟動之后,輸入mount可以查看mount信息: ~~~ root@sabresd_6dq:/ # mount rootfs / rootfs rw 0 0 /dev/root / ext4 ro,relatime,user_xattr,barrier=1,data=ordered 0 0 tmpfs /dev tmpfs rw,nosuid,relatime,mode=755 0 0 devpts /dev/pts devpts rw,relatime,mode=600 0 0 proc /proc proc rw,relatime 0 0 sysfs /sys sysfs rw,relatime 0 0 none /acct cgroup rw,relatime,cpuacct 0 0 tmpfs /mnt/secure tmpfs rw,relatime,mode=700 0 0 tmpfs /mnt/asec tmpfs rw,relatime,mode=755,gid=1000 0 0 tmpfs /mnt/obb tmpfs rw,relatime,mode=755,gid=1000 0 0 tmpfs /mnt/shm tmpfs rw,relatime,size=1024k,mode=775,uid=1000,gid=1003 0 0 none /dev/cpuctl cgroup rw,relatime,cpu 0 0 /dev/block/mmcblk1p2 /system ext4 ro,relatime,user_xattr,barrier=1,data=ordered 0 0 /dev/block/mmcblk1p3 /data ext4 rw,nosuid,nodev,noatime,nodiratime,errors=panic,user_xattr,barrier=1,nomblk_io_submit,data=ordered,noauto_da_alloc 0 0 /dev/block/mmcblk1p5 /cache ext4 rw,nosuid,nodev,relatime,user_xattr,barrier=1,nomblk_io_submit,data=ordered 0 0 /dev/block/mmcblk1p6 /device ext4 ro,relatime,user_xattr,barrier=1,data=ordered 0 0 none /sys/kernel/debug debugfs rw,relatime 0 0 /dev/fuse /mnt/shell/emulated fuse rw,nosuid,nodev,relatime,user_id=1023,group_id=1023,default_permissions,allow_other 0 0 ~~~ 下面則是這些分區的size信息: ~~~ 1|root@sabresd_6dq:/ # df Filesystem Size Used Free Blksize / 96.8M 6.0M 90.8M 1024 / 96.8M 6.0M 90.8M 1024 /dev 381.6M 48.0K 381.6M 4096 /mnt/secure 381.6M 0.0K 381.6M 4096 /mnt/asec 381.6M 0.0K 381.6M 4096 /mnt/obb 381.6M 0.0K 381.6M 4096 /mnt/shm 1024.0K 0.0K 1024.0K 4096 /system 503.9M 234.5M 269.5M 4096 /data 1007.9M 48.8M 959.1M 4096 /cache 503.9M 16.4M 487.6M 4096 /device 503.9M 16.4M 487.6M 4096 /mnt/shell/emulated 1007.9M 48.8M 959.1M 4096 ~~~ ## APK的測試 和前面一樣,我們使用Android Studio編譯一個HelloWorld程序,并選擇這個設備運行,那么就會自動push apk并安裝這個apk到設備中,如果沒有出現問題,那么就OK了,如下: ![](https://box.kancloud.cn/2016-05-05_572afc994839a.jpg) 連接完成后,可以在logcat中看到信息: ![](https://box.kancloud.cn/2016-05-05_572afc995b8b8.jpg) 新建Android Project的時候需要注意API版本的匹配,不要用比設備更高的Android版本。 同時需要注意打開開發者模式,使能USB調試。 ## 開發過程中遇到的其他問題 OTG線連接不穩定,會不斷的出現如下log: ~~~ <span style="font-family:Microsoft YaHei;font-size:18px;">android_work: did not send uevent (0 0 (null)) android_work: did not send uevent (0 0 (null)) android_work: did not send uevent (0 0 (null))</span> ~~~ 正常連接的應該是這樣的log: ~~~ android_work: sent uevent USB_STATE=DISCONNECTED android_work: sent uevent USB_STATE=CONNECTED android_usb gadget: high speed config #1: android android_work: sent uevent USB_STATE=CONFIGURED mtp_open ~~~ 同時也可以在PC中使用下面命令來查看dmesg,從而確定是否打開了調試,并確認OTG adb連接是否有問題: ~~~ dmesg | tail ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看