歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

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

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.   
  3. if [ `id -u` != "0" ]  
  4. then  
  5. echo -e "\033[33m Becoming root \033[0m"  
  6. su -c bu  
  7. exit 1  
  8. fi  
  9.   
  10. echo -e "\033[33m Setting some stuff up..\033[0m "  
  11.   
  12. export bin=/system/bin  
  13. export mnt=/data/local/ubuntu  
  14. export PATH=$bin:/usr/bin:/usr/sbin:/bin:$PATH  
  15. export TERM=linux  
  16. export HOME=/root  
  17.   
  18. if [ ! -d $mnt ]  
  19. then  
  20. mkdir $mnt  
  21. fi  
  22.   
  23. echo -e "\033[33m Mounting the Linux Image \033[0m"  
  24.   
  25. #replace /dev/block/mmcblk1p2 by the partition Ubuntu image is replaced  
  26. #it might be a loop image  
  27. busybox mount -t ext4 -o noatime,nodiratime /dev/block/mmcblk1p2 $mnt  
  28. busybox mount -t devpts devpts $mnt/dev/pts  
  29. busybox mount -t proc proc $mnt/proc  
  30. busybox mount -t sysfs sysfs $mnt/sys  
  31.   
  32. echo -e "\033[33m Setting Up Networking\033[0m"  
  33.   
  34. sysctl -w net.ipv4.ip_forward=1  
  35. echo "nameserver 8.8.8.8" >> $mnt/etc/resolv.conf  
  36. echo "nameserver 8.8.4.4" >> $mnt/etc/resolv.conf  
  37. echo "127.0.0.1 localhost" > $mnt/etc/hosts  
  38.   
  39. echo -e "\033[33m Mounting sdcard in /mnt/sdcard\033[0m"  
  40. if [ ! -d $mnt/mnt/sdcard ]  
  41. then  
  42. mkdir $mnt/mnt/sdcard  
  43. fi  
  44.   
  45. busybox mount --bind /mnt/sdcard/ $mnt/mnt/sdcard  
  46.   
  47. echo -e "\033[33m Entering CHROOT \033[0m"  
  48. echo " "  
  49.   
  50. chroot $mnt /bin/bash  
  51.   
  52. echo " "  
  53. echo -e "\033[33m Shutting down CHROOT\033[0m"  
  54. echo -e "\033[33m umount $mnt/mnt/sdcard\033[0m"  
  55. busybox umount $mnt/mnt/sdcard  
  56. sysctl -w net.ipv4.ip_forward=0  
  57. echo -e "\033[33m umount $mnt/dev/pts\033[0m"  
  58. busybox umount $mnt/dev/pts  
  59. echo -e "\033[33m umount $mnt/proc\033[0m"  
  60. busybox umount $mnt/proc  
  61. echo -e "\033[33m umount $mnt/sys\033[0m"  
  62. busybox umount $mnt/sys  
  63.   
  64. echo -e "\033[33m umount $mnt\033[0m"  
  65. busybox fuser -k $mnt  
  66. 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