移植ubuntu core到Arm开发板

origin: http://blog.csdn.net/kickxxx/article/details/15341079

最初是想把整个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,就导致内核代码
    1. if(sys_access((constchar__user*)ramdisk_execute_command,0)!=0){
    sys_access访问失败,调用prepare_namespace 从mmcblk0p1安装根文件系统
  • root=b301,是/dev/block/mmcblk0p1的16进制主设备号b3和从设备号01
  • rootfs=ext2,文件系统类型

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

  1. VFS:Mountedroot(ext2filesystem)ondevice179:1.

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

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

  1. udevd[123]:unabletoreceivectrlconnection:Functionnotimplemented
  2. udevd[123]:unabletoreceivectrlconnection:Functionnotimplemented
  3. udevd[123]:unabletoreceivectrlconnection:Functionnotimplemented
  4. udevd[123]:unabletoreceivectrlconnection:Functionnotimplemented
  5. udevd[123]:unabletoreceivectrlconnection:Functionnotimplemented
  6. udevd[123]:unabletoreceivectrlconnection:Functionnotimplemented
如果你出现了,那么执行第5步


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

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


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


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

  1. @@-1228,8+1228,14@@CONfig_FB_MXC_SYNC_PANEL=y
  2. #Consoledisplaydriversupport
  3. #
  4. #CONfig_VGA_CONSOLEisnotset
  5. +#CONfig_VGACON_SOFT_SCROLLBACKisnotset
  6. CONfig_DUMMY_CONSOLE=y
  7. -#CONfig_FRAMEBUFFER_CONSOLEisnotset
  8. +CONfig_FRAMEBUFFER_CONSOLE=y
  9. +#CONfig_FRAMEBUFFER_CONSOLE_DETECT_PRIMARYisnotset
  10. +#CONfig_FRAMEBUFFER_CONSOLE_ROTATIONisnotset
  11. +#CONfig_FONTSisnotset
  12. +CONfig_FONT_8x8=y
  13. +CONfig_FONT_8x16=y

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


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

  • 在/etc/init.d增加文件/etc/init/ttymxc.conf
    1. #console-getty
    2. #
    3. #Thisservicemaintainsagettyonconsolefromthepointthesystemis
    4. #starteduntilitisshutdownagain.
    5. startonstoppedrcRUNLEVEL=[2345]andcontainerCONTAINER=lxc
    6. stoponrunlevel[!2345]
    7. respawn
    8. exec/sbin/getty-L115200ttymxc0vt102

  • 修改rootfs的文件/etc/rc.local,如下
    1. #!/bin/sh-e
    2. #
    3. #rc.local
    4. #
    5. #Thisscriptisexecutedattheendofeachmultiuserrunlevel.
    6. #Makesurethatthescriptwill"exit0"onsuccessoranyother
    7. #valueonerror.
    8. #
    9. #Inordertoenableordisablethisscriptjustchangetheexecution
    10. #bits.
    11. #
    12. #Bydefaultthisscriptdoesnothing.
    13. startttymxc0
    14. exit0

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

相关文章

目录前言一、创建Hadoop用户二、更新apt和安装Vim编辑器三、...
原文连接:https://www.cnblogs.com/yasmi/p/5192694.html ...
电脑重启后,打开VirtualBox,发现一直用的虚拟机莫名的消失...
参见:https://blog.csdn.net/weixin_38883338/article/deta...
Ubuntu 18.04 LTS 已切换到 Netplan 来配置网络接口。Netpla...
介绍每个 Web 服务都可以通过特定的 URL 在 Internet 上访问...