歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 讓Ubuntu和Android同時運行(Ubuntu on Android)

讓Ubuntu和Android同時運行(Ubuntu on Android)

日期:2017/3/1 10:23:39   编辑:Linux編程

Ubuntu目前有個項目叫Ubuntu for Android(http://www.ubuntu.com/devices/android),看起來非常cool:


它的原理在http://www.ubuntu.com/devices/android並無介紹。但是我們猜測可以用chroot配合實現一個最簡單的Ubuntu for Android。

我們為Andriod編寫一個腳本Ubuntu.sh,在該腳本中啟動Ubuntu的文件系統,透過chroot進行:

  1. #!/system/bin/sh
  2. if [ `id -u` != "0" ]
  3. then
  4. echo -e "\033[33m Becoming root \033[0m"
  5. su -c bu
  6. exit 1
  7. fi
  8. echo -e "\033[33m Setting some stuff up..\033[0m "
  9. export bin=/system/bin
  10. export mnt=/data/local/ubuntu
  11. export PATH=$bin:/usr/bin:/usr/sbin:/bin:$PATH
  12. export TERM=linux
  13. export HOME=/root
  14. if [ ! -d $mnt ]
  15. then
  16. mkdir $mnt
  17. fi
  18. echo -e "\033[33m Mounting the Linux Image \033[0m"
  19. #replace /dev/block/mmcblk1p2 by the partition Ubuntu image is replaced
  20. #it might be a loop image
  21. busybox mount -t ext4 -o noatime,nodiratime /dev/block/mmcblk1p2 $mnt
  22. busybox mount -t devpts devpts $mnt/dev/pts
  23. busybox mount -t proc proc $mnt/proc
  24. busybox mount -t sysfs sysfs $mnt/sys
  25. echo -e "\033[33m Setting Up Networking\033[0m"
  26. sysctl -w net.ipv4.ip_forward=1
  27. echo "nameserver 8.8.8.8" >> $mnt/etc/resolv.conf
  28. echo "nameserver 8.8.4.4" >> $mnt/etc/resolv.conf
  29. echo "127.0.0.1 localhost" > $mnt/etc/hosts
  30. echo -e "\033[33m Mounting sdcard in /mnt/sdcard\033[0m"
  31. if [ ! -d $mnt/mnt/sdcard ]
  32. then
  33. mkdir $mnt/mnt/sdcard
  34. fi
  35. busybox mount --bind /mnt/sdcard/ $mnt/mnt/sdcard
  36. echo -e "\033[33m Entering CHROOT \033[0m"
  37. echo " "
  38. chroot $mnt /bin/bash
  39. echo " "
  40. echo -e "\033[33m Shutting down CHROOT\033[0m"
  41. echo -e "\033[33m umount $mnt/mnt/sdcard\033[0m"
  42. busybox umount $mnt/mnt/sdcard
  43. sysctl -w net.ipv4.ip_forward=0
  44. echo -e "\033[33m umount $mnt/dev/pts\033[0m"
  45. busybox umount $mnt/dev/pts
  46. echo -e "\033[33m umount $mnt/proc\033[0m"
  47. busybox umount $mnt/proc
  48. echo -e "\033[33m umount $mnt/sys\033[0m"
  49. busybox umount $mnt/sys
  50. echo -e "\033[33m umount $mnt\033[0m"
  51. busybox fuser -k $mnt
  52. busybox umount $mnt
其中的一行:
  1. busybox mount -t ext4 -o noatime,nodiratime /dev/block/mmcblk1p2 $mnt
是為了mount Ubuntu的rootfs,我們的實驗中Ubuntu的rootfs存放在/dev/block/mmcblk1p2。該文件系統通過rootstack得到:

sudo rootstock -f ubuntu -l <yourname> -p <yourpassword> -i 1G --seed linux-image-omap,build-essential,tightvncserver, lxde

將得到的tgz包解壓到我們sd卡的分區2。

運行Ubuntu.sh,進入到了Ubuntu的根文件系統,並執行了bash,之後我們開一個vncserver:

  1. export USER=root
  2. vncserver -geometry 800x480

在Android端,通過VNCClient軟件連接到127.0.0.1:5901即可。

Copyright © Linux教程網 All Rights Reserved