查看: 6529|回复: 5

构建RioTBoard嵌入式linux系统

[复制链接]
  • TA的每日心情
    奋斗
    2015-10-8 09:49
  • 签到天数: 430 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2014-6-15 23:48:13 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 bruce_helen 于 2014-6-15 23:53 编辑

    使用RioTboard开发板后发现,官方给了两个文件系统:一个安卓,一个Ubuntu。对于想在RioTboard上进行基本的嵌入式开发来说这两个文件系统太大了,他们包含了很多我们不需要的东西。
    搞过MCU的都想从头开始搭建嵌入式linux系统,让一切在自己的掌控之中。首先,我们需要一个精简的文件系统,上面包含基本的功能即可。
    我们可以编译busybox来构建最基本的文件系统,但这里我们为简单起见,先直接使用飞思卡尔官方工具ltib来生成文件系统,后面有时间再使用busybox自己编译一个。

    下面是具体的移植步骤。
    第一步
    由于我们定位嵌入式开发,暂时不需要LCD显示什么的。因此我们对u-boot的默认启动参数作一下修改,当然你完全可以在u-boot命令行状态下使用setenv来修改参数。
    修改<u-boot-src>\include\configs文件夹中的mx6solo_RioTboard.h文件,将宏定义CONFIG_EXTRA_ENV_SETTINGS改为:
    #define        CONFIG_EXTRA_ENV_SETTINGS                                        \
            "netdev=eth0\0"                                                        \
            "ethprime=FEC0\0"                                                \
            "uboot=u-boot.bin\0"                                                \
            "kernel=uImage\0"                                                \
            "bootargs=console=ttymxc1,115200 nosmp "                        \
            "bootargs_mmc=setenv bootargs ${bootargs} "                        \
                    "root=/dev/mmcblk0p1 rootwait\0"                        \
            "bootcmd_mmc=run bootargs_mmc; "                                \
            "mmc dev 3; "                                                        \
            "mmc read ${loadaddr} 0x800 0x2000; bootm\0"                        \
            "bootcmd=run bootcmd_mmc\0"
    这样启动时就不会初始化LCD了。编译u-boot,将u-boot.bin按照RioTboard用户手册的操作说明放到下载工具对应的目录下。

    第二步
    从飞思卡尔官网下载L3.0.35_4.1.0_130816_source.tar.gz压缩包。这个压缩包里面包含了全套工具和源代码。完成安装后使用ltib –c命令就能生成u-boot,kernel,文件系统,一步到位!
    我们使用其中的文件系统,这个文件系统压缩后大小为60MB,比ubuntu 800多MB小太多了,下载能省不少时间。
    大家没必要都去编译非常耗时),这里提供编译好的文件系统,下载地址:
    链接: http://pan.baidu.com/s/1i3EBOc1 密码: 7toc
    将下载的文件直接放入下载工具Mfgtools对应的目录:Mfgtools-Rel-4.1.0_130816_MX6DL_UPDATER\Profiles\MX6DL Linux Update\OS Firmware\files

    第三步
    修改mfgtool下载工具的配置文件。首先在ucl2.xml文件中增加下面的LIST "i.MX6SOLO-linux-RIOT-eMMC"
    1. <LIST name="i.MX6SOLO-linux-RIOT-eMMC" desc="Choose eMMC as media">
    2.     <CMD state="BootStrap" type="boot" body="BootStrap" file ="u-boot-mx6solo-riot.bin" >Loading U-boot</CMD>
    3.     <CMD state="BootStrap" type="load" file="uImage" address="0x10800000"
    4.         loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE" >Loading Kernel.</CMD>
    5.     <CMD state="BootStrap" type="load" file="initramfs.cpio.gz.uboot" address="0x10C00000"
    6.         loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE" >Loading Initramfs.</CMD>
    7.     <CMD state="BootStrap" type="jump" > Jumping to OS image. </CMD>

    8.     <CMD state="Updater" type="push" body="send" file="mksdcard.sh.tar">Sending partition shell</CMD>
    9.     <CMD state="Updater" type="push" body="$ tar xf $FILE "> Partitioning...</CMD>
    10.     <CMD state="Updater" type="push" body="$ sh mksdcard.sh /dev/mmcblk0"> Partitioning...</CMD>
    11.     <CMD state="Updater" type="push" body="send" file="files/u-boot-mx6solo-riot.bin">Sending u-boot.bin</CMD>
    12.     <CMD state="Updater" type="push" body="$ dd if=$FILE of=/dev/mmcblk0 bs=512 seek=2 skip=2 conv=fsync">write u-boot.bin to sd card</CMD>
    13.     <CMD state="Updater" type="push" body="$ dd if=/dev/zero of=/dev/mmcblk0 bs=512 seek=1536 count=16">clean up u-boot parameter</CMD>
    14.     <CMD state="Updater" type="push" body="send" file="files/uImage">Sending kernel uImage</CMD>
    15.     <CMD state="Updater" type="push" body="$ dd if=$FILE of=/dev/mmcblk0 bs=1M seek=1 conv=fsync">write kernel image to sd card</CMD>

    16.         <!-- 文件系统烧写 -->
    17.     <CMD state="Updater" type="push" body="$ mkfs.ext3 -j /dev/mmcblk0p1">Formatting rootfs partition</CMD>
    18.     <CMD state="Updater" type="push" body="$ mkdir -p /mnt/mmcblk0p1"/>
    19.     <CMD state="Updater" type="push" body="$ mount -t ext3 /dev/mmcblk0p1 /mnt/mmcblk0p1"/>
    20.     <CMD state="Updater" type="push" body="pipe tar -jxv -C /mnt/mmcblk0p1" file="files/rootfs.tar.bz2">Sending and writting rootfs</CMD>
    21.     <CMD state="Updater" type="push" body="frf">Finishing rootfs write</CMD>
    22.     <CMD state="Updater" type="push" body="$ umount /mnt/mmcblk0p1">Unmounting rootfs partition</CMD>

    23.     <CMD state="Updater" type="push" body="$ echo Update Complete!">Done</CMD>
    24. </LIST>
    复制代码
    然后将cfg.ini文件中的 [LIST]修改为
    [LIST]
    name = i.MX6SOLO-linux-RIOT-eMMC
    为了方便,这里将两个配置文件打包:
    两个配置文件.7z (5.82 KB, 下载次数: 20)
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2014-6-4 09:26
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2014-6-16 09:02:14 | 显示全部楼层
    精简系统,能多那么多空余内存,灰常不错
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2015-10-8 09:49
  • 签到天数: 430 天

    连续签到: 1 天

    [LV.9]以坛为家II

     楼主| 发表于 2014-6-16 16:10:50 | 显示全部楼层
    浮华若梦 发表于 2014-6-16 09:02
    精简系统,能多那么多空余内存,灰常不错

    这个内存基本上是linux内核占用了。内核启动完成之后只开启几个简单的应用程序(busybox),内存占用不大
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2022-4-28 09:50
  • 签到天数: 443 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2014-6-19 15:09:43 | 显示全部楼层
    做得好!   学习了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2015-12-20 18:02:14 | 显示全部楼层
    多谢分享,但是那个文件系统的压缩包已经没有了,楼主是否可以再共享下
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2016-7-1 22:05:27 | 显示全部楼层
    uboot和kernel都是用LTIB编译的吗?
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-4-25 18:06 , Processed in 0.174247 second(s), 26 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.