最初是想把整個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,就導致內核代碼
sys_access訪問失敗,調用prepare_namespace 從mmcblk0p1安裝根文件系統if (sys_access((const char __user *) ramdisk_execute_command, 0) != 0) {
- root=b301,是/dev/block/mmcblk0p1的16進制主設備號b3和從設備號01
- rootfs=ext2,文件系統類型
4. 啓動開發板,會打印出如下信息:
VFS: Mounted root (ext2 filesystem) on device 179:1.
表示已經mount 根文件系統成功。
這一步可能會出現如下錯誤:
udevd[123]: unable to receive ctrl connection: Function not implemented
udevd[123]: unable to receive ctrl connection: Function not implemented
udevd[123]: unable to receive ctrl connection: Function not implemented
udevd[123]: unable to receive ctrl connection: Function not implemented
udevd[123]: unable to receive ctrl connection: Function not implemented
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,修改內核配置文件如下
@@ -1228,8 +1228,14 @@ CONFIG_FB_MXC_SYNC_PANEL=y
# Console display driver support
#
# CONFIG_VGA_CONSOLE is not set
+# CONFIG_VGACON_SOFT_SCROLLBACK is not set
CONFIG_DUMMY_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE is not set
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+# CONFIG_FONTS is not set
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
重新編譯內核,重啓系統後,可在LCD看到ubuntu的登錄console
8 支持serial console,我的開發板沒有usbhost,不能接usb鍵盤,所以需要用serial console控制
- 在/etc/init.d增加文件/etc/init/ttymxc.conf
# console - getty # # This service maintains a getty on console from the point the system is # started until it is shut down again. start on stopped rc RUNLEVEL=[2345] and container CONTAINER=lxc stop on runlevel [!2345] respawn exec /sbin/getty -L 115200 ttymxc0 vt102
- 修改rootfs的文件/etc/rc.local,如下
#!/bin/sh -e # # rc.local # # This script is executed at the end of each multiuser runlevel. # Make sure that the script will "exit 0" on success or any other # value on error. # # In order to enable or disable this script just change the execution # bits. # # By default this script does nothing. start ttymxc0 exit 0
重新啓動後,即可在串口得到控制檯信息。