根文件系统rootfs的移植及制作镜像ramdisk.img
【1】移植根文件系统的工具 —> busybox 1. 短小精悍 2. 版本更新较快,版本之间差异不大 【2】 如何获取busybox 1)/downloads/ 选择busybox-1.32.0.tar.bz2版本 2)前往我的博客里下载
使用busybox工具制作根文件系统1. 拷贝busybox-1.32.0.tar.bz2到ubuntu中 2. 解压缩 tar -vxf busybox-1.32.0.tar.bz2 3. 进入到busybox-1.32.0目录 cd busybox-1.32.0 4. 切换交叉编译器为gcc-4.9.4版本(高点的版本) 5. 配置编译busybox 1> 修改Makefile配置交叉编译器 164 CROSS_COMPILE ?= 190 ARCH ?= $(SUBARCH) 修改为 : 164 CROSS_COMPILE ?= arm-none-linux-gnueabi- 190 ARCH ?= arm 2> 清除中间文件 make distclean 3> 执行make menuconfig进行图形化界面配置 make menuconfig a) 采用静态编译,不使用动态库 Settings —> [星号]Build static binary (no shared libs) 星号:* b) 采用vi风格的命令行编辑 Settings —> [星号]vi-style line editing commands 星号:* c) 修改根文件系统的安装路径 Settings —> (./rootfs) Destination path for "make install’ d) 支持完整的模块化命令 Linux Module Utilities —> [ ] Simplified modutils 去掉* 4> 编译busybox make all 5> 安装根文件系统 make insta 6> 测试新生成的根文件系统 将新生成的根文件系统拷贝到nfs目录下下 cp rootfs ~/nfs -rf 6,启动开发板 启动成功,但是有错误信息如下: can’t run "/etc/init.d/rcS’: No such file or directory can’t open /dev/tty2: No such file or directory can’t open /dev/tty3: No such file or directory can’t open /dev/tty4: No such file or directory
解决无法进入根文件系统的步骤1)文件不存在就创建文件 在根文件系统中创建etc/init.d目录,并创建rcS文件 并修改rcS文件的权限为777, $ cd ~/nfs/rootfs $ mkdir -p etc/init.d $ cd etc/init $ touch rcS $ chmod 777 rcS 打开rcS文件,并添加一下内容: #!/bin/sh /bin/mount -a echo /sbin/mdev > /proc/sys/kernel/hotplug /sbin/mdev -s 创建dev目录: $ cd ~/nfs/rootfs $ mkdir dev 2)再次启动开发板出现下图样式 解决: 在etc目录下创建fatab文件 $ cd ~/nfs/rootfs $ cd etc $ touch fstab 打开fstab,并添加一下内容: #device mount-point type options dump fsck orde proc /proc proc defaults 0 0 tmpfs /tmp tmpfs defaults 0 0 sysfs /sys sysfs defaults 0 0 tmpfs /dev tmpfs defaults 0 0 /etc/init.d/rcS: line 3: can’t create /proc/sys/kernel/hotplug: nonexistent directory 解决办法: $ cd ~/nfs/rootfs $ mkdir proc
【资料图】
mdev: /sys/dev: No such file or directory 解决办法: $ cd ~/nfs/rootfs $ mkdir sys 3)再次启动开发板观察现象 解决办法: $ cd ~/nfs/rootfs $ mkdir tmp 4)再次重启开发板,观察现象 解决办法: 在etc目录下创建inittab文件 $ cd ~/nfs/rootfs $ cd etc $ touch inittab 打开inittab文件,并添加一下内容 ::sysinit:/etc/init.d/rcS ::askfirst:-/bin/sh ::restart:/sbin/init ::ctrlaltdel:/sbin/reboot 5)再次重启开发板,观察现象。 根文件系统基本制作成功。 将其他的几个文件创建出来: mkdir lib home mnt root var 6)进入根文件系统成功 发现用户名没有 解决方案: 在etc目录下创建profile文件,并添加一下信息: export HOSTNAME=… (…:改为自己设的名字) export USER=root export HOME=root #export PS1=“[\u@\h \W\ ]$ " #cd root export PS1=”[HOSTNAME \W]# " PATH=/bin:/sbin:/usr/bin:/usr/sbin LD_LIBRARY_PATH=/lib:/usr/lib:$LD_LIBRARY_PATH export PATH LD_LIBRARY_PATH 7)测试根文件系统 编译hello.c的应用程序,使用交叉编译器进行编译, 拷贝到开发板中去运行,查看运行结果。运行之后出现以下出错误: 使用以下命令查看hello依赖的动态库是: arm-none-linux-gnueabi-readelf -d hello 解决办法: 移植动态库到根文件系统中 从交叉编译器中找对应的动态库。 $ cd ~/toolchain/gcc-4.9.4 $ find . -name libc.so.6 将交叉编译器./arm-none-linux-gnueabi/sysroot/lib/ 目录中的所有的动态库, 全部拷贝到根文件系统的lib目录下 $ cp -rf ./arm-none-linux-gnueabi/sysroot/lib/* ~/nfs/rootfs/lib
将rootfs打包生成ramdisk.img的镜像文件1,将根文件系统(rootfs)制作成根文件系统镜像(ramdisk.img) 进入到ubuntu的家目录 cd ~
执行如下命令制作一个大小为8M的镜像文件 dd if=/dev/zero of=ramdisk bs=1k count=8192
将该镜像格式化为ext2格式 mkfs.ext2 -F ramdisk
将该镜像文件挂载到ubuntu下的/mnt目录下 sudo mount -t ext2 ramdisk /mnt
删除库文件中的符号表减小库文件体积: su root$ arm-none-linux-gnueabi-strip lib/* (下图错误不用搭理) 效果如下图 将制作的根文件系统中所有的文件拷贝到该镜像中 :sudo cp -a /home/linux/nfs/rootfs/* /mnt/
解除挂载 sudo umount /mnt
压缩镜像 gzip --best -c ramdisk > ramdisk.gz
使用mkimage为镜像文件添加校验头然后生成可用的镜像ramdisk.img mkimage -n “ramdisk” -A arm -O linux -T ramdisk -C gzip -d ramdisk.gz ramdisk.img 将制作生成的根文件系统镜像拷贝到tftp的下载目录下并修改其权限 cp ramdisk.img /home/linux/tftpboot/$ chmod 777 /home/linux/tftpboot/ramdisk.img
重新配置linux内核使其支持ramdisk文件系统进入到的linux源码的顶层目录下 cd kernel-3.4.39/
执行以下命令进入内核配置界面 make menuconfig (如果ubuntu没安装,就先安装一个 ) 在图形化界面中进入到“Device Drivers —>”菜单, 再进入“[*] Block devices —>”菜单,将 “RAM block device support” 选为“Y”, 将“Default RAM disk size (kbytes)”修改为“8192”,如图所示:
配置完成后保存退出。 回到内核源码的顶层目录下重新编译内核源码(将交叉编译器切换到4.5.1版本*****低版本,可以在我的博客下载) make uImage 将生成的uImage文件拷贝到tftp服务器的下载目录中: cp arch/arm/boot/uImage /home/linux/tftpboot/ chmod 777 /home/linux/tftpboot/uImage 3,将新生成的内核镜像uImage和根文件系统镜像ramdisk.img烧写到EMMC中并从EMMC中启动测试 【产品阶段系统部署方式(项目完成)】 uboot —>EMMC/SD卡 uImage —>EMMC/SD卡 ramdisk.img —>EMMC/SD卡 1> 将内核镜像uImage烧写到EMMC中 tftp 0x41000000 uImage mmc write 0x41000000 0x800 0x4000 2>. 将根文件系统镜像ramdisk.img烧写到EMMC中 tftp 0x41000000 ramdisk.img mmc write 0x41000000 0x20800 0x20800 3>. 设置uboot的启动参数
setenv bootcmd mmc read 0x48000000 0x800 0x4000; mmc read 0x49000000 0x20800 0x20800; bootm 0x48000000 0x49000000 saveenv
setenv bootargs root=/dev/ram rw initrd=0x49000040,0x1000000 rootfstype=ext4 init=/linuxrc console=ttySAC0,115200 saveenv
到此如果串口工具软件可以通过U-boot自启动并且进入根文件系统,则表示完成
相关阅读
精彩推荐
- 根文件系统rootfs的移植及制作镜像ramdisk.img
- 美油跌穿70美元重挫4%,现货黄金连跌五日
- 餐饮行业如何融合发展?这个交流活动为“食在广州”建言献策_世界快讯
- 美国海军系统或曾检测到失踪潜水器内爆声音
- 全新梅赛德斯奔驰GLC轿跑SUV发布 7月上市 全球报道
- 今日观点!插进去动态图
- 工行网银转账手续费最新标准_工行网银转账手续费
- 焦点简讯:李国庆直播带货难救早晚读书
- 2023北京中考开考
- 鲅鱼干哪里的好_冬季怎样挑选鲅鱼干 冬季如何挑选鲅鱼干
- 当前动态:端午假期民航日均运输旅客较2019年同期增长11.5%
- 简讯:过分水岭温庭筠答案(过分水岭温庭筠)
- 天天快播:酸奶加火龙果可以减肥_火龙果可以减肥吗
- innovationsemiconductor_innovations-当前视点
- 利息收入增值税税率1_利息收入增值税税率_当前快讯
- 【播资讯】易大宗(01733)6月23日斥资约96.24万港元回购94.8万股
- 世界讯息:面对恩比德&约基奇?文班亚马:到顶峰的路漫长 准备向任何人学习
- 山东好景丨酷热中感受济南人的夜市情结_世界热消息
- 中国男篮按计划将于今天开始在青岛展开集训 结束时间为7月6日
- 星岛(01105)附属完成出售一幢商业大厦 天天微头条
- 妄下断语是成语吗?_妄下断语 是什么意思_速读
- 全球微资讯!3682公里的环法超马,杭州跑圈大神“大力”正在路上
- 江苏省计算机二级报名_江苏省计算机二级_环球新资讯
- 怎样才能缓解紧张情绪的心情_怎样才能缓解紧张情绪|热闻
- 【世界报资讯】测评枪械BERETTAM93R(CFHD高清大区)
- 送别!南京大屠杀幸存者高恒发去世 快讯
- 中国气象局启动高温四级应急响应 环球看点
- 多彩民俗 绽放新韵
- 延时运营!17号线这个站点明晚加开定点加班车
- 如何成立私募基金 要闻速递