最初是想把整个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,就导致内核代码
- if(sys_access((constchar__user*)ramdisk_execute_command,0)!=0){
- root=b301,是/dev/block/mmcblk0p1的16进制主设备号b3和从设备号01
- rootfs=ext2,文件系统类型
4. 启动开发板,会打印出如下信息:
- VFS:Mountedroot(ext2filesystem)ondevice179:1.
表示已经mount 根文件系统成功。
这一步可能会出现如下错误:
- udevd[123]:unabletoreceivectrlconnection:Functionnotimplemented
- udevd[123]:unabletoreceivectrlconnection:Functionnotimplemented
- udevd[123]:unabletoreceivectrlconnection:Functionnotimplemented
- udevd[123]:unabletoreceivectrlconnection:Functionnotimplemented
- udevd[123]:unabletoreceivectrlconnection:Functionnotimplemented
- udevd[123]:unabletoreceivectrlconnection:Functionnotimplemented
https://github.com/genesi/Linux-legacy/commit/a84fac75f38de592e530a2f9f982d7aafec6c288
6. 编译内核并烧写到开发板上,重启系统后,不会再打印step4的错误
- @@-1228,8+1228,14@@CONFIG_FB_MXC_SYNC_PANEL=y
- #Consoledisplaydriversupport
- #
- #CONFIG_VGA_CONSOLEisnotset
- +#CONFIG_VGACON_SOFT_SCROLLBACKisnotset
- CONFIG_DUMMY_CONSOLE=y
- -#CONFIG_FRAMEBUFFER_CONSOLEisnotset
- +CONFIG_FRAMEBUFFER_CONSOLE=y
- +#CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARYisnotset
- +#CONFIG_FRAMEBUFFER_CONSOLE_ROTATIONisnotset
- +#CONFIG_FONTSisnotset
- +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
- #
- #Thisservicemaintainsagettyonconsolefromthepointthesystemis
- #starteduntilitisshutdownagain.
- startonstoppedrcRUNLEVEL=[2345]andcontainerCONTAINER=lxc
- stoponrunlevel[!2345]
- respawn
- exec/sbin/getty-L115200ttymxc0vt102
- 修改rootfs的文件/etc/rc.local,如下
-
- #!/bin/sh-e
- #
- #rc.local
- #
- #Thisscriptisexecutedattheendofeachmultiuserrunlevel.
- #Makesurethatthescriptwill"exit0"onsuccessoranyother
- #valueonerror.
- #
- #Inordertoenableordisablethisscriptjustchangetheexecution
- #bits.
- #
- #Bydefaultthisscriptdoesnothing.
- startttymxc0
- exit0
重新启动后,即可在串口得到控制台信息。