origin:

最初是想把整个ubuntu移植到MX51开发板,因为项目不需要运行桌面系统,所以只移植了一个基本的ubuntu core系统

 1. 下载ubuntu core rootfs,关于ubuntu core参考https://wiki.ubuntu.com/Core

http://cdimage.ubuntu.com/ubuntu-core/releases/12.04/release/ubuntu-core-12.04.3-core-armhf.tar.gz

这个镜像就是一个rootfs,可以作为根文件系统使用。


2. 把镜像烧写到开发板的一个分区上

    • adb shell进入开发板,busybox mkfs.ext2 /dev/block/mmcblk0p1
    • adb shell进入开发板,mount -t ext2 /dev/block/mmcblk0p1 /mnt
    • adb push ubuntu-core-12.04.3-core-armhf.tar.gz /mnt/
    • adb shell进入开发板,cd /mnt; busybox tar ubuntu-core-12.04.3-core-armhf.tar.gz. 在/dev/block/mmcblk0p1这个分区上建立了一个完整的rootfs,文件系统类型为ext2

    3. 我的arm开发板是mx51,修改uboot启动参数如下:

    set bootargs_android 'setenv bootargs ${bootargs_base} init=/init rdinit=asdf root=b301 rootfs=ext2 di0_primary video=mxcdi0fb:RGB24,CLAA-WVGA'

    粗体是我增加的参数,解释下增加的几个参数:

    • rdinit=asdf,rdinit=后的asdf是胡乱写的,这样会设置ramdisk_execute_command为asdf,就导致内核代码


      [cpp] view plain copy
      1. if (sys_access((const char
      2.  sys_access访问失败,调用prepare_namespace 从mmcblk0p1安装根文件系统
      • root=b301,是/dev/block/mmcblk0p1的16进制主设备号b3和从设备号01
      • rootfs=ext2,文件系统类

      4. 启动开发板,会打印出如下信息:


      [cpp] view plain copy


      1. VFS: Mounted root (ext2 filesystem) on device 179:1.


      表示已经mount 根文件系统成功。

      这一步可能会出现如下错误:


      [cpp] view plain copy

      1. udevd[123]: unable to receive ctrl connection: Function not implemented  
      2. udevd[123]: unable to receive ctrl connection: Function not implemented  
      3. udevd[123]: unable to receive ctrl connection: Function not implemented  
      4. udevd[123]: unable to receive ctrl connection: Function not implemented  
      5. udevd[123]: unable to receive ctrl connection: Function not implemented  
      6. udevd[123]: unable to receive ctrl connection: Function not implemented

      如果你出现了,那么执行第5步


      5. 按链接给的patch, 修改内核

      https://github.com/genesi/Linux-legacy/commit/a84fac75f38de592e530a2f9f982d7aafec6c288


      6. 编译内核并烧写到开发板上,重启系统后,不会再打印step4的错误


      7. 支持LCD console,修改内核配置文件如下


      [cpp] view plain copy


      1. @@ -1228,8 +1228,14 @@ CONFIG_FB_MXC_SYNC_PANEL=y  
      2.  # Console display driver support
      3.  #
      4.  # CONFIG_VGA_CONSOLE is not set
      5. +# CONFIG_VGACON_SOFT_SCROLLBACK is not set  
      6.  CONFIG_DUMMY_CONSOLE=y  
      7. -# CONFIG_FRAMEBUFFER_CONSOLE is not set  
      8. +CONFIG_FRAMEBUFFER_CONSOLE=y  
      9. +# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set  
      10. +# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set  
      11. +# CONFIG_FONTS is not set  
      12. +CONFIG_FONT_8x8=y  
      13. +CONFIG_FONT_8x16=y


      重新编译内核,重启系统后,可在LCD看到ubuntu的登录console


      8 支持serial console,我的开发板没有usbhost,不能接usb键盘,所以需要用serial console控制

      1. # console - getty
      2. #
      3. # This service maintains a getty on console from the point the system is
      4. # started until it is shut down again.
      5.   
      6. start on stopped rc RUNLEVEL=[2345] and container CONTAINER=lxc  
      7.   
      8. stop on runlevel [!2345]  
      9.   
      10. respawn  
      11. exec /sbin/getty -L 115200 ttymxc0 vt102
      1. #!/bin/sh -e
      2. #
      3. # rc.local
      4. #
      5. # This script is executed at the end of each multiuser runlevel.
      6. # Make sure that the script will "exit 0" on success or any other
      7. # value on error.
      8. #
      9. # In order to enable or disable this script just change the execution
      10. # bits.
      11. #
      12. # By default this script does nothing.
      13. start ttymxc0  
      14. exit 0

      重新启动后,即可在串口得到控制台信息。