2980|0

86

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

如何在TQ AM335X挂载Ramdisk [复制链接]

2015年第二期【嵌入式分享】,将对天嵌科技工业级开发平台TQ AM335X进行软件上的技术分享,主要在于在TQ AM335X开发平台上挂载Ramdisk的教程。本文由资深博主girlkoo进行分享,感谢广大用户对天嵌产品的支持。

  本文将使用busybox制作根文件系统并打包成ramdisk供u-boot启动内核使用。

  (1)制作根文件系统

  使用busybox构建根文件系统的步骤可以参考本博客的另外一篇文章,该文章链接如下:

  S5PV210(TQ210)学习笔记——内核移植与文件系统构建

  需要补充的是,文章"S5PV210(TQ210)学习笔记——内核移植与文件系统构建"中记录rootfs文件系统构建时漏掉了一步,没有在etc/sysconfig/目录下创建HOSTNAME文件,可以手动添加HOSTNAME文件,其内容为主机名称,本文使用了tq335x。在rootfs目录可以通过如下指令创建:

  • echo tq335x > etc/sysconfig/HOSTNAME  

  本文在已制作好的rootfs基础上,制作ramdisk。


  (2)制作ramdisk

  制作ramdisk的方式很多,最方便的是使用指令genext2fs。ubuntu操作系统上可以通过apt-get工具直接安装genext2fs工具:

  • sudo apt-get install genext2fs  

  其它操作系统也有类似的管理工具,这里就不一一列举了,下面使用genext2fs打包rootfs目录。命令如下:

  • genext2fs -b 4096 -d rootfs/ ramdisk  

  然后使用gzip命令压缩ramdisk:

  • gzip -9 -f ramdisk  

  执行完成该命令后可以得到文件ramdisk.gz。

  由于u-boot启动内核使用的ramdisk需要有u-boot的image头,故需要使用编译u-boot时生成的工具mkimage将ramdisk.gz制作为ramdisk.img。其中,工具mkimage位于u-boot的tools目录下,制作ramdisk.img的指令如下:

  • u-boot-2014.10/tools/mkimage -A arm -O linux -T ramdisk -C none -a 0x88080000 -n "ramdisk" -d ramdisk.gz ramdisk.img  

  命令中mkimage前的路径根据自己实际执行的路径指定即可。

  这样,就完成了u-boot可以使用的ramdisk制作,然后将ramdisk.img拷贝到SD卡的boot目录下即可。


  (3)挂载ramdisk

  老式的ATAGS方式启动内核时使用ATAG传递bootargs给内核,由于本文使用的dtb方式启动内核,故采取dtb的chosen方式传递bootargs给内核。

  Step1: 修改内核配置

  • make ARCH=arm menuconfig  

  进入配置项:

  • Boot options  --->  

  按N键取消配置项:

  • [ ] Use appended device tree blob to zImage (EXPERIMENTAL)  

  官方内核默认启用了该项配置。启用该项配置后内核兼容老式的ATAGS方式内核启动,关闭后则使用新式的dtb方式启动,故此处禁用了此项配置。

  按ESC保存配置后退出menuconfig画面,重新编译内核:

  • make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -j8  

  Step2:添加bootargs到dtb

  切换到内核目录arch/arm/boot/dts/,拷贝am335x-evm.dts为tq335x.dts:

  • cp am335x-evm.dts tq335x.dts  

  打开tq335x.dts,在memory项后通过chosen方式添加bootargs,添加内容如下:

  • memory {  
  •     device_type = "memory";  
  •     reg = <0x80000000 0x10000000>; /* 256 MB */  
  • };  
  •   
  • chosen {  
  •     bootargs = "console=ttyO0,115200n8 root=/dev/ram0";  
  • };  
  •   
  • ...  

  其中chosen节点是新添加的,memory节点是原有的。

  接下来重新编译dtb:

  • make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- tq335x.dtb  

  将新编译得到的tq335x.dtb拷贝到SD的boot目录下。至此,准备工作就完成了,下面我们使用新制作的ramdisk.img和tq335x.dtb启动内核。

  Step3:使用新制作的ramdisk.img和tq335x.dtb启动内核

  将SD插到开发板上,给开发板上电(开发板切换到SD卡启动模式),可以通过按任意键打断内核启动进入u-boot命令模式(由于之前没有配置u-boot的bootcmd环境变量,而默认的u-boot环境无法启动内核,故,开发板上电后不按键的话也会进入u-boot的命令行模式)。

  首先是加载内核到DRAM:

  • load mmc 0 ${loadaddr} /boot/zImage  

  其中,${loadaddr}在u-boot的环境变量中默认指定为0x82000000,这里可以直接打数字。

  然后是加载dtb到DRAM:

  • load mmc 0 ${fdtaddr} /boot/tq335x.dtb  

  ${fdtaddr}的默认值是0x88000000。

  接下来加载ramdisk到DRAM:

  • load mmc 0 ${rdaddr} /boot/ramdisk.img  

  ${rdaddr}的默认值是0x88080000

  最后就是将ramdisk和dtb的加载地址作为参数启动内核:

  • bootz ${loadaddr} ${rdaddr} ${fdtaddr}  

  至此,Linux内核已经能够正常启动并进入终端模式了。


  (4)小结

  到目前为止,已经能够成功启动内核了,接下来我们会在新内核的基础上添加tq335x板载驱动。


此帖出自ARM技术论坛
点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表