定制一个Linux发行版ROM
来源:互联网 发布:从事大数据需要学什么 编辑:程序博客网 时间:2024/05/16 17:27
http://www.swiftboard.org/wiki/index.php?title=Linux_ROM#.E6.89.93.E5.8C.85ROM
本文主要介绍如何为swiftboard(以下简称sw)定制一个Linux发行版ROM.
本教程假定读者有Linux基础,了解常用命令工具
目录
[隐藏]- 1 ROM介绍
- 2 开发环境准备
- 3 编译kernel
- 4 准备rootfs
- 5 fex配置文件
- 6 编译bootloader
- 6.1 TF版ROM
- 6.2 NAND版ROM
- 7 打包ROM
- 7.1 TF版ROM
- 7.2 NAND版ROM
- 8 ROM的使用
- 8.1 TF版ROM
- 8.2 NAND版ROM
ROM介绍
通常,一个Linux ROM由 bootloader, linux kernel 和 rootfs 构成.在全志平台上,ROM中还包含一个硬件配置文件(script.bin),主要用于描述外设参数以及与SoC之间连接.
sw上有一般两种方式引导系统, 板载的NAND和外接的TF卡.这两种方式的ROM除了bootloader和打包方式不同外,并无太大区别.两种方式的ROM制作本文均会涉及,有区别之处会分别介绍.
开发环境准备
需要的开发环境:
- 版本较新的Linux发行版(如ubuntu 12.04),制作NAND版ROM必须用64位系统(全志打包工具要求)
- 64位系统安装 ia32-libs
- 必须的build工具集(make,gcc等) build-essential
- 交叉编译器 gcc-arm-linux-gnueabihf
- uImage制作工具 uboot-mkimage
- 全志fex编译工具 fex2bin (链接)
编译kernel
下载针对sw修改过的kernel代码 [1]
下载内核配置文件 .config ,改名为".config"后放入代码根目录
cd 代码所在目录#编译内核及模块make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- uImage modules#新建模块输出目录mkdir output#安装模块到输出目录make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_MOD_PATH=output modules_install
准备rootfs
本节以linaro ubuntu为例,其他发行版操作类似.
下载linux发行版的rootfs并解压 linaro ubuntu 13.04
#请确保解压时使用root权限,否则某些文件无法创建sudo tar -xvf linaro-quantal-alip-20130422-342.tar.gz
进入rootfs的根目录后,复制上一节产生的内核模块
sudo cp -r 内核代码目录/output/lib .
新建显示驱动配置文件 usr/share/X11/xorg.conf.d/99-fbdev.conf
Section "Device" Identifier "Allwinner A10/A13 FBDEV" Driver "fbdev" Option "fbdev" "/dev/fb0"EndSection
修改启动加载模块列表 etc/modules
umpdispmalimali_drm8188eu
新建无线网卡参数配置文件 etc/modprobe.d/8188eu.conf
# Workaround for dropping connections because power saveoptions 8188eu rtw_power_mgnt=0 rtw_enusbss=0
你还可以对rootfs进一步定制,现在对rootfs的修改都将反映到最终生成的ROM中
fex配置文件
sys_config1.fex是全志设计的用于描述设备连接的配置文件,格式简单易懂,可以使用文本编辑器修改.
本教程使用的文件修改自swiftboard官方的共享.
从这里下载后保存为sys_config1.fex
fex文件需要转为二进制格式才能被内核读取,因此需要转换(制作NAND版ROM可以跳过此步骤,打包时会自动转换)
fex2bin sys_config1.fex >script.bin
编译bootloader
我们选用u-boot作为ROM的bootloader, 对于TF和NAND版ROM使用不同的u-boot
TF版ROM
git clone https://github.com/linux-sunxi/u-boot-sunxi.gitcd u-boot-sunxigit checkout v2013.07-sunximake 'Cubieboard' CROSS_COMPILE=arm-linux-gnueabihf-
编译成功后会得到 spl/sunxi-spl.bin u-boot.bin 两个文件
参考说明
NAND版ROM
从这里下载lichee版u-boot
进入代码目录,编译
make distclean && make sun4i CROSS_COMPILE=arm-linux-gnueabihf-
编译成功后将得到u-boot.bin文件
打包ROM
TF版ROM
为了制作ROM,我们首先要准备一个空白磁盘(不是分区),这个磁盘的所有内容(包括分区表)将被完全复制到最终的TF卡上.
考虑到实际的可操作性,我们用一个虚拟磁盘镜像文件替代物理磁盘.所以我们要先生成一个包含分区表的磁盘镜像文件.
#生成一个空白文件.大小为1750M(由于存储厂商克扣容量,1800M就是2G卡实际容量,设小一点是为了踏实一些),可根据实际情况调整.dd if=/dev/zero of=tf.img bs=1M count=2048#把镜像文件映射到loop设备上sudo losetup /dev/loop0 tf.img#分区(共两个分区,一个引导用分区,存放kernel和fex配置;另一个是根分区)sudo sfdisk --in-order -L -uS /dev/loop0 <<-EOT2048,131072,c,,LEOT#把分区从磁盘中映射出来,生成loop0p1, loop0p2设备sudo kpartx -av /dev/loop0#格式化两个分区(注意,在某些发行版上,上一步映射出的设备文件位置可能不同,需调整)sudo mkfs.vfat -I /dev/mapper/loop0p1sudo mkfs.ext4 /dev/mapper/loop0p2
至此,虚拟磁盘准备完毕.现在不忙卸载loop设备,因为我们还要往里面复制文件.
首先复制引导分区的文件
sudo mount /dev/mapper/loop0p1 /mntsudo cp kernel目录/arch/arm/boot/uImage /mntsudo cp fex所在目录/script.bin /mntsudo umount /mnt
接着复制根分区文件
sudo mount /dev/mapper/loop0p2 /mntcd rootfs目录sudo cp -a * /mntsudo umount /mnt
解除分区映射
sudo kpartx -d /dev/loop0
然后向虚拟磁盘中写入u-boot (u-boot位于第一个分区前的未分区空间中)
cd u-boot所在目录sudo dd if=spl/sunxi-spl.bin of=/dev/loop0 bs=1024 seek=8sudo dd if=u-boot.bin of=/dev/loop0 bs=1024 seek=32
最后卸载loop设备
sudo losetup -d /dev/loop0
大功告成! tf.img就是最终生成的ROM镜像文件了
NAND版ROM
NAND版ROM打包需要使用全志的打包工具 [2] 进入打包工具所在目录后
cd a10/outcp u-boot目录/u-boot.bin .cp kernel目录/arch/arm/boot/uImage boot.img #创建分区镜像文件dd if=/dev/zero of=rootfs.ext4 bs=1M count=1907mkfs.ext4 rootfs.ext4 #复制rootfs文件sudo mount -o loop rootfs.ext4 /mntsudo cp -a rootfs目录/* /mntsudo umount /mnt cd ../tools/pack#复制fex配置文件cp fex目录/sys_config1.fex chips/sun4i/configs/linux/default/sys_config1.fex#最后运行打包程序./pack -c sun4i -p linux -b evb -B nand
如果打包成功,最后会输出一行红字,显示产生的img的位置
ROM的使用
TF版ROM
直接将img文件写入TF卡即可,windows用户可使用win32DiskImager工具,linux/mac用户可使用dd工具
NAND版ROM
按LiveSuit烧写固件指引操作即可
- 定制一个Linux发行版ROM
- 定制LINUX发行版本
- 定制ubuntu发行版
- 推荐一个Linux的发行版:ArchLinux
- 建设一个自己的Linux发行版
- linux下修改ROM定制镜像
- ROM 定制
- 基于CentOS6.2定制发行版
- 根据CentOS定制自己的发行版
- 从发行版定制可以从USB移动硬盘上引导的Portable Linux (再次修正版)
- 定制Linux发行版:向CentOS6安装镜像添加自定义软件包
- 红帽公司推出专为 Docker 定制 Linux 发行版
- 定制自己Linux发行版(ISO):向安装程序添加自定义软件包
- 查出当前的Linux发行版的一个方法
- 一个linux发行版列表,摘自www.beautifullinux.com
- 从头开始构建一个嵌入式 Linux 发行版
- 从头开始构建一个嵌入式 Linux 发行版
- 寻找一个适合自己的linux发行版
- struct和typedef struct彻底明白了
- 浅谈UML中类之间的五种关系及其在代码中的表现形式
- 我跑得快摔的疼 跑得慢 吃不到
- hadoop中map和reduce的数量设置
- javascript中的变量
- 定制一个Linux发行版ROM
- JAVA基础③
- android 多线程数据库读写分析与优化
- Accelerated C++ 习题解答 第0章
- Qt5.2.1 + VS2012 环境配置
- uses-sdk
- java实现斐波那契数列
- OJ_1066
- jsp IE 既定标准设置