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,就导致内核代码
    [cpp] view plain copy
    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. 启动开发板,会打印出如下信息:

[cpp] view plain copy
  1. VFS:Mountedroot(ext2filesystem)ondevice179:1.

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

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

[cpp] view plain copy
  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,修改内核配置文件如下

[cpp] view plain copy
  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
  • [cpp] view plain copy
    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,如下
  • [cpp] view plain copy
    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

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

移植ubuntu core到Arm开发板的更多相关文章

  1. 将Trickle移植到android

    >如何告诉编译器链接我之前为android交叉编译的共享库,以便为android生成最终的可执行命令行应用程序.而且这甚至可以在Android上移植涓流?

  2. android – PANIC:’arm’CPUS缺少模拟器引擎程序

    我得到了与下面链接中提到的相同的问题.但是这个问题已被搁置,我仍在寻求解决方案.https://stackoverflow.com/questions/27146511/panic-missing-emulator-engine-program-for-arm-cpus-eclipse所以我想提出这个问题并在这里问一下.直到昨天,模拟器工作正常.但是从今天起,我在尝试打开模拟器时收到以下错误我的A

  3. Android是否真的存在于ARM之外的其他平台上?

    我想将用C编写的应用程序移植到android.将应用程序从C转换为Java将需要大量工作,我更愿意使用该应用程序更好地为该平台,而不是修复转换错误和解决重构问题.NDK似乎是一条很好的路线,但实际上我不想错过一个平台只是因为NDK不支持或不支持它.Android声称支持MIPS,ARM,X86和其他……是否有任何运行或将运行Android的非ARM设备?

  4. android – 关于arm-eabi-gcc和交叉编译

    如果是的,然后问题2:我正在尝试编译这样一个库:libao.使用这些命令:在组装结束时收到以下内容:configure:错误:在此平台上找不到16位类型!如何修复和正确配置库?

  5. Android模拟器ABI

    序言:这个问题已经过时了.创建Android虚拟设备时,可以选择cpu/ABI.我已经尝试了所有可用的目标–除了ARM之外别无选择.我的目标是Android3.2.我假设这是为了在x86上模拟平板电脑或上网本.那些甚至存在于硬件中吗?编辑:在AndroidToolsv17中,API级别10下有一个可选的IntelAtomx86映像.编辑2:ARMv7a现在也在那里.到目前为止没有MIPS.EDIT3:MIPS仿真器和图像现在也可用.等待一些新架构(ARMv8?

  6. 如何强制Android应用程序使用32位或64位库

    在具有64位ARM的Android设备上,将有两个版本的库,32位和64位,它们的性能可能会有所不同.我想知道是否有办法强制应用程序使用32位或64位库.解决方法安装apk时可以指定ABI.adbinstall–abi

  7. Android NDK – 它支持直接ARM代码或只支持Thumb

    我被要求评估我们的产品的Android平台,我正在看各种选项,我只是刚刚刮目前的表面,一件事令我困扰的是,我看不到如何编译代码作为直接的ARM代码,我知道Thumb运行速度较慢,我们将需要在代码的关键部分的性能.我认为应该只是在Android.mk文件的LOCAL_CFLAGS中设置-march标志,但是我不能让它工作…解决方法在Android.mk中为模块指定以下标志将编译直接的ARM代码.启用优化也可能有助于:

  8. 如何在Android项目中使用ARM汇编代码?

    我对Assembly和ARM没有特别的经验,但是我可以在其中编写一些例程,我想看看它们是如何在装有ARM的Android设备上运行的.将程序代码文件包含在Android项目中的程序是什么?我可以只从本机代码或从Java调用吗?

  9. android-ndk – 使用arm-linux-androideabi-gcc编译对象的问题

    背景OSX是OS>R8NDK我正在使用AndroidGCC编译器来编译下面的类…我用以下命令做…所以由于缺乏gcc知识,我发现这一点,并尝试…有人可以帮我做我做错了吗?我错过了一个链接吗?解决方法您必须告诉GCC在哪里找到Android系统文件和标题.使用:>ndk-build和一个带有BUILD_EXECUTABLE的Android.mk>或–sysrootGCC选项[1][2]

  10. iOS逆向工程之Hopper中的ARM指令详解

    这篇文章主要介绍了iOS逆向工程之Hopper中的ARM指令的相关资料,本文介绍的非常详细,具有参考借鉴价值,需要的朋友可以参考下

随机推荐

  1. crontab发送一个月份的电子邮件

    ubuntu14.04邮件服务器:Postfixroot收到来自crontab的十几封电子邮件.这些邮件包含PHP警告.>我已经解决了这些警告的原因.>我已修复每个cronjobs不发送电子邮件(输出发送到>/dev/null2>&1)>我删除了之前的所有电子邮件/var/mail/root/var/spool/mail/root但我仍然每小时收到十几封电子邮件.这些电子邮件来自cronjobs,

  2. 模拟两个ubuntu服务器计算机之间的慢速连接

    我想模拟以下场景:假设我有4台ubuntu服务器机器A,B,C和D.我想在机器A和机器C之间减少20%的网络带宽,在A和B之间减少10%.使用网络模拟/限制工具来做到这一点?

  3. ubuntu-12.04 – 如何在ubuntu 12.04中卸载从源安装的redis?

    我从源代码在Ubuntu12.04上安装了redis-server.但在某些时候它无法完全安装,最后一次makeinstallcmd失败.然后我刚刚通过apt包安装.现在我很困惑哪个安装正在运行哪个conf文件?实际上我想卸载/删除通过源安装的所有内容,只是想安装一个包.转到源代码树并尝试以下命令:如果这不起作用,您可以列出软件自行安装所需的步骤:

  4. ubuntu – “apt-get source”无法找到包但“apt-get install”和“apt-get cache”可以找到它

    我正在尝试下载软件包的源代码,但是当我运行时它无法找到.但是当我运行apt-cache搜索squid3时,它会找到它.它也适用于apt-getinstallsquid3.我使用的是Ubuntu11.04服务器,这是我的/etc/apt/sources.list我已经多次更新了.我尝试了很多不同的debs,并没有发现任何其他地方的错误.这里的问题是你的二进制包(deb)与你的源包(deb-src)不

  5. ubuntu – 有没有办法检测nginx何时完成正常关闭?

    &&touchrestarted),因为即使Nginx没有完成其关闭,touch命令也会立即执行.有没有好办法呢?这样的事情怎么样?因此,pgrep将查找任何Nginx进程,而while循环将让它坐在那里直到它们全部消失.你可以改变一些有用的东西,比如睡1;/etc/init.d/Nginx停止,以便它会休眠一秒钟,然后尝试使用init.d脚本停止Nginx.你也可以在某处放置一个计数器,这样你就可以在需要太长时间时发出轰击信号.

  6. ubuntu – 如何将所有外发电子邮件从postfix重定向到单个地址进行测试

    我正在为基于Web的应用程序设置测试服务器,该应用程序发送一些电子邮件通知.有时候测试是使用真实的客户数据进行的,因此我需要保证服务器在我们测试时无法向真实客户发送电子邮件.我想要的是配置postfix,以便它接收任何外发电子邮件并将其重定向到一个电子邮件地址,而不是传递到真正的目的地.我正在运行ubuntu服务器9.10.先感谢您设置本地用户以接收所有被困邮件:你需要在main.cf中添加:然后

  7. ubuntu – vagrant无法连接到虚拟框

    当我使用基本的Vagrantfile,只配置了两条线:我看到我的虚拟框打开,但是我的流氓日志多次显示此行直到超时:然后,超时后的一段时间,虚拟框框终于要求我登录,但是太久了!所以我用流氓/流氓记录.然后在我的物理机器上,如果我“流氓ssh”.没有事情发生,直到:怎么了?

  8. ubuntu – Nginx – 转发HTTP AUTH – 用户?

    我和Nginx和Jenkins有些麻烦.我尝试使用Nginx作为Jenkins实例的反向代理,使用HTTP基本身份验证.它到目前为止工作,但我不知道如何传递带有AUTH用户名的标头?}尝试将此指令添加到您的位置块

  9. Debian / Ubuntu – 删除后如何恢复/ var / cache / apt结构?

    我在ubuntu服务器上的空间不足,所以我做了这个命令以节省空间但是现在在尝试使用apt时,我会收到以下错误:等等显然我删除了一些目录结构.有没有办法做apt-getrebuild-var-tree或类似的?

  10. 检查ubuntu上安装的rubygems版本?

    如何查看我的ubuntu盒子上安装的rubygems版本?只是一个想法,列出已安装的软件包和grep为ruby或宝石或其他:)dpkg–get-selections

返回
顶部