NanoPC-T2制作刷机包

anoPC-T2制作刷机包

前提:到友善的wiki中,仔细看编译uboot、内核、制作刷机包的教程。

准备工作:

1、 虚拟机Ubuntu安装,并安装n多软件可以支撑编译内核等等。

2、  安装交叉编译器,参考wiki-8.1。

3、 下载友善修改好的uboot、内核源代码,debian_nanopi2、sd-fuse_nanopi2等制作刷机包的脚本,友善有两套代码:

Uboot2014,和linux-3.4.y是配套使用,没有使用设备树.

Uboot2016和linux-4.4.y是配套使用,使用设备树.

4、 下载友善已经制作好的刷机包,也可以使用sd-fuse_nanopi2自己制作(最好使用这种方法,里面有东西后面用到)。

我使用的源码版本是uboot2014和linux-3.4.y,文件系统是busybox-1.30.0,具体分析就不多说了,直接来操作:

第一步-编译:

到友善的git上去下载对应得源码包(最好使用git拉取,直接下载好像会出错,选好分支不然编译会失败)

以上只用到了部分,全是用git拉取后,压缩的包,备份起来,下载是真的慢。

解压出来(具体命令自己百度)

分别是文件系统,kernel,刷机包工具、uboot

进入uboot_nanopi2目录下,直接编译,大概不到一分钟,就ok了,具体命令wiki上有,

进入linux-3.4.y目录下,直接编译,时间大概5分钟,具体命令wiki上有,

make nanopi2_linux_defconfig

make uImage -j12   (PC机cpu多核可以使用jn 的命令)

进入busybox目录下,直接编译,时间大概10分钟,可以百度下具体做法。

make menuconfig

设置完交叉工具链的前缀后,保存退出,直接make,

执行make install

至于剩下的拷贝库文件,创建各种文件等等,就自行百度就可以解决, 或者直接看韦东山老师的教程,写的很详细。其中一点:脚本里面的串口设备名称是ttyAMA0,不要写错了,要不然会出错。

第二步-分析官方的二进制文件分布

进入sd-fuse_s5p4418目录下,文件和文件夹如下:

fusing.sh  mkimage.sh  prebuilt  README.md  tools,最好先看下readme,先了解下。

首先执行脚本mkimage.sh,跟一个参数android(也可以是其他的,分析下脚本就知道了)

./mkimage.sh android

虚拟机必须联网,因为需要下载一些东西,我提前下载好了,也可以把脚本中的链接复制到迅雷中下载,然后再拷到虚拟机解压在当前目录下,也是可以的。android-lollipop-images.tgz,解压在当前文件夹。

进入文件夹,可以看到很多文件:

2ndboot.bin  bootloader  env.conf   partmap.txt  userdata.img

boot.img     cache.img   info.conf  system.img

其中2ndboot.bin是s5p4418官方的,看不到源码,猜测就是一个自举文件。

bootloader 就是uboot生成的文件

boot.img 是kernel和类似于ramdisk的小文件系统。

Cache.img system.img userdata.img是安卓的文件,我暂时没有去管它。

剩下两个.conf文件是一些环境变量,最后一个文件partmap.txt对我们有很大的参考价值

# sd0 partition map

# flash= <device>.<dev no>:<partition>:<fstype>:<start>,<length>

#   support device : eeprom, nand, mmc

#   support fstype : 2nd, boot, raw, fat, ext4, ubi

#

flash=mmc,0:2ndboot:2nd:0x200,0x7e00:2ndboot.bin;

flash=mmc,0:bootloader:boot:0x8000,0x77000:bootloader;

flash=mmc,0:boot:fat:0x000100000,0x004000000:boot.img;

flash=mmc,0:system:ext4:0x04100000,0x2F200000:system.img;

flash=mmc,0:cache:ext4:0x33300000,0x1AC00000:cache.img;

flash=mmc,0:misc:emmc:0x4E000000,0x00800000;

flash=mmc,0:recovery:emmc:0x4E900000,0x01600000;

flash=mmc,0:userdata:ext4:0x50000000,0x0:userdata.img;

文件直接把刷机包的分区和地址写好了,但是我们不知道bootloader是否和我们编译好的完全一样,其中的boot.img又是由那些文件组成的?我们就需要分析这些。

脚本执行完毕后,会生成一个s5p4418-android-lollipop-20190420.img文件,我们需要分析这个文件,看下官方是怎么做的。

把刚做好的刷机包、android-lollipop-images.tgz解压出来的文件、我们编译好的uboot和uImage拷贝到PC上,对比文件,看下有那些差异。

首先看刷机包,使用分区助手看下分区情况:

Boot分区,有uImage,root.img.gz,ramdisk-recovery.img等等文件

System分区和其他分区是安卓文件系统,对我们没什么价值,就不看了。

分析分区,我们知道第一个分区放的是kernel和ramdisk这样的文件系统,第二个分区放的是文件系统。可以对比下boot分区下的uImage和我们编译的有什么大的差异(其实官方仅仅把它放在里面而已)

接下来对比uboot,发现BootLoader就是uboot,没有什么大的差异。

从上面的分析,可以得出友善官方规划的刷机包分区其实和partmap.txt中的分区是一一对应的,那么我们是不是可以测试下,看是否可以成功做出最小的刷机包512M(可以参考下韦东山老师关于友善neo的视频(免费),里面讲的比较好)。

截取partmap.txt中和我们相关的分区部分,我规划了一个分区,没装visio,不能画图,只有写下来

flash=mmc,0:2ndboot:2nd:0x200,0x7e00:2ndboot.bin;

flash=mmc,0:bootloader:boot:0x8000,0x77000:bootloader;

flash=mmc,0:boot:fat:0x000100000,0x004000000:boot.img;

flash=mmc,0:system:ext4:0x04100000,0x2F200000:system.img;

SD卡的一个小知识:SD卡的分区信息放在前512B中,而一般SD卡的最小擦除单元刚好是512B=0x200=1 sector;(也可能不是sector)

2ndboot.bin  0x200    = 1 sector

Bootloader   0x8000    =64 sector

boot.img        第一个分区-格式fat 20M

文件系统       第二个分区-格式ext4 256-20M(我们暂时先分区,等内核可以跑起来再说)

进入我们的linux目录下,新建build目录,把2ndboot.bin,我们自己编译的u-boot.bin,uImage拷贝到build目录下。

一下操作可以百度下它的意思,我就不细说了,注意空格:

dd if=/dev/zero of=fs_nanopc_256M.img bs=1M count=256

losetup /dev/loop0 fs_nanopc_256M.img

fdisk /dev/loop0  //参看分区表,直接按回车代表默认属性,+20M代表第一个分区是20M,第二个分区直接回车代表剩余空间全部分配给第二个分区,最好w,代表写入分区表,

可以输入p查看分区情况

分区完后,写入分区文件系统格式:

partprobe /dev/loop0

mkfs.fat /dev/loop0p1

mkfs.ext4 /dev/loop0p2

拷贝文件到img文件中:

dd if=2ndboot.bin of=/dev/loop0 bs=512 seek=1

dd if=u-boot.bin  of=/dev/loop0 bs=512 seek=64

现在我们的uboot已经放入到刷机包中,我们可以把这个刷机包烧写到SD卡中测试了,文件只有512M,烧写不超过1分钟,预计uboot可以启动。然而我们发现,串口输出可以预估的不一样,如下:

串口打印出这些信息,说明2ndboot.bin已经执行了,但是uboot没启动。

分析可能:

我们下载的android目录下的bootloader和我们编译的一样,是不是脚本执行过程中往里面添加了一些东西???

看下脚本,但是感觉友善这个脚本写的有点乱,也没看出什么来,所以我接直接粗暴的方式对比文件:到0x8000的位置,看使用官方的脚本制作的刷机包s5p4418-android-lollipop-xxx.img,和我们的uboot有什么不一样

发现uboot并不是放在0x8000的地址上,而是放在0x8200的地址上,而且0x8000-0x8200之间还有一些数据,暂时不知道具体含义。

使用粗暴的做法,直接创建一个bin文件,把0x8000-0x8200的内容放到里面,

再次修改我们的分区信息:

2ndboot.bin  0x200    = 1 sector

head.bin        0x8000   = 64 sector

Bootloader   0x8200    =65 sector

boot.img        第一个分区-格式fat 20M

文件系统       第二个分区-格式ext4 256-20M(我们暂时先分区,等内核可以跑起来再说)

修改我们的刷机包:

dd if=2ndboot.bin of=/dev/loop0 bs=512 seek=1

dd if=head.bin  of=/dev/loop0 bs=512 seek=64

dd if=u-boot.bin  of=/dev/loop0 bs=512 seek=65

顺便把内核也放到里面:

mount /dev/loop0p1 /mnt

cp uImage /mnt

umount /mnt

重新烧写SD卡,启动:

Uboot正常启动,但是内核没有加载,看下默认的环境变量,有很多设置不符合我们现在的情况,修改如下

setenv bootdelay 5

setenv kernel uImage

setenv bootargs console=ttyAMA0,115200n8 root=/dev/mmcblk1p2 rootfstype=ext4 rootwait init=/sbin/init loglevel=7 printk.time=1 consoleblank=0  bootdev=2

setenv bootcmd $bloader 0x48000000 $bootfile

set bloader ext4load mmc 0:1

但是我们发现设置后,无法加载ext2文件系统,我们在分区时,boot的文件系统是fat的,但是uboot并没有支持fat文件系统,我们在分区助手里面看到boot分区也是ext4的,所以我们应该修改boot分区的文件系统为ext4

再次制作:

losetup -d /dev/loop0 //首先卸载设备

rm fs_nanopc_256M.img      //删除未完善的刷机包

重复刚才的步骤:

dd if=/dev/zero of=fs_nanopc_256M.img bs=1M count=256

losetup /dev/loop0 fs_nanopc_256M.img

fdisk /dev/loop0

partprobe /dev/loop0

mkfs.ext4 /dev/loop0p1

mkfs.ext4 /dev/loop0p2

把所有需要的文件全部写入到刷机包中

dd if=2ndboot.bin of=/dev/loop0 bs=512 seek=1

dd if=head.bin  of=/dev/loop0 bs=512 seek=64

dd if=u-boot.bin  of=/dev/loop0 bs=512 seek=65

mount /dev/loop0p1 /mnt  //挂载第一个分区到

cp uImage /mnt

umount /mnt

mount /dev/loop0p2 /mnt         //挂载第二个分区

cp ../imgForNanopi2/fs_nanopi2/* -rfd /mnt/   //复制文件系统到第二个分区,使用rfd的参数

umount /mnt

losetup -d /dev/loop0

重新烧写测试:

设置环境变量:

setenv bootdelay 5

setenv kernel uImage

setenv bootargs console=ttyAMA0,115200n8 root=/dev/mmcblk1p2 rootfstype=ext4 rootwait init=/sbin/init loglevel=7 printk.time=1 consoleblank=0  bootdev=2

setenv bootcmd $bloader 0x48000000 $bootfile

set bloader ext4load mmc 0:1

因为控制台设置环境变量不能有分号,所以,现在不能自动启动内核,需要我们手动

run bootcmd

bootm

进入了熟悉的界面,说明我们只做刷机包已经成功了。关于uboot环境变量的设置,最好修改uboot源码,修改宏定义。

但是实际操作中,并没有这么顺利,还是有很多问题:

1、 uboot的环境变量,有些官方写死了,就算是我们修改了,重启就恢复了

2、 boot分区下的ramdisK文件系统,有什么用?我暂时没去管它

3、 官方代码更新了,相应的脚本等等一些文件并没有及时更新,

已经很晚了,就不写了!有事不要找我,没事更不要找我!!!

原文地址:https://www.cnblogs.com/yddeboke/p/10743606.html

时间: 2024-10-08 14:23:15

NanoPC-T2制作刷机包的相关文章

[rom助手]制作刷机包,一键刷机不求人

随着Android系统的普及以及刷机热潮的蔓延,很多pc端的一键傻瓜式刷机辅助工具纷纷问世,有了他们的帮助我们即可轻松实现刷机.那么在众多的制作工具中,哪一款才是适合自己的?本人一直钟爱的是蘑菇rom助手,下面就和大家分享一下,在rom助手的辅助下,怎样制作刷机包,做到一键刷机不求人的功效. 软件介绍:   蘑菇rom助手是一款手机系统rom文件的编辑制作工具.通过直观的操作界面和简洁的使用流程,实现对手机系统rom文件的修改和制作.蘑菇rom预装器可以帮助使用者将希望预装的apk软件封装进系统

怎样制作刷机包,让你的rom更个性

刷机的乐趣,只有刷了才知道!当然准备工作是必不可少的,那么怎样制作个性的刷机包呢?相信有很多人还在为制作rom的问题而烦恼,其实制作的方法很简单,那我们就来学习一下,轻松的制作刷机包,让你的rom更个性. 直入主题: 我们要下载一款适合机型的rom包,和一个第三方制作工具,比如:蘑菇rom助手(如果有其他更好的工具也可以使用) 1:打开蘑菇rom助手,可以选择"系统精简","性能优化","解包img","预装apk",&quo

索尼 LT26I刷机包 X.I.D 增加官方风格 GF A3.9.4 各方面完美

ROM介 FX_GF_A系列是具有官方风格的.稳定的.流畅的.省电的.新功能体验的.最悦耳音效体验的ROM. FX_GF_A更新日志 ☆ GF_3.9.4 更新信息 ☆ 更新播放器 ☆ 更新adsp数据 ☆ 更新部分Z2音频数据 ☆ 改动脚本 ☆ 修正可换锁屏壁纸 ☆ GF_3.9.3 更新信息 ☆ 更新播放器桌面插件2.0.A.0.54 ☆ 调整录音文字显示 ☆ 增加新版日历带农历12.0.A.0.23 ☆ 更新播放器8.3.A.0.7 ☆ 更新相冊6.1.A.1.14 ☆ 调整均衡器 ☆ 改

三星note3 N900刷机包 4.4.2 ZSUDNE3 官方原汁原味 稳定流畅

ROM介绍 此ROM基于最新的4.4.2 ZSUDNE3 制作,添加一些必要功能,其他性能基本与官方无差距,各方面感觉都很不错了.此ROM本人自用,所以制作风格有点个人倾向.任何建议或者问题欢迎大家前来反馈 ROM简介: ◆基于4.4.2最新的ZSUDNE3版本制作而成,官方原版最新内核,最新基带 ◆加入短信归属地和通话记录归属地 ◆加入高级通话设置:呼入.呼出录音,去除铃声渐强,结束通话时的延迟时间(代码参考颓废,在此表示感谢) ◆添加右上角时间一键锁屏 ◆天气使用S5天气,透明度大家可以自行

三星N900(note3)刷机包 颓废N0.8.1 修复已知BUG 集成谷歌服务

ROM介绍 8.1更新信息:攻克了来电后点击HOME出现SECPHONE已经停止的问题 去掉了桌面隐藏信息的选项,官方最新底包暂不支持这功能 增加了网友们须要验证的谷歌服务(不须要的同学同步什么的都关掉) ROM全局取出了调试信息相关代码.加快对应速度. 去除了一处SMALI导致的频繁调用问题 一些细节的修改和调试 基于三星官方OTA 最新XXUENF3精简制作而成 无基带,保证不会被锁. 官方内核 稳定首选 Zipaligned全部APK 更顺滑 精简了大部分定制机的国人非常少用到的APK.

绘制专属心情的完美刷机包,之创新发展的路上

  绘制专属心情的完美刷机包,蘑菇rom助手带来了不同的感官效应,不一样的体验效果,在市场压力的驱动下,他也在不断创新发展,时代赋予的枷锁,当然也会少不了,面对流言蜚语,我们各抒几见.  创新就是创造一种资源.倘若是一个人,没有改变,没有成长,幸福的人都喜欢沉默.一直喋喋不休说自己如何幸福的人一定内心是虚弱的.当一个人内心足够强大时,说与不说,都已无用.最重要的是选择适合自己的方向,一意孤行下去,找到亮光点,世人也不会再去评头论足.就像rom助手,他就如同一件艺术品,有的人会对他欣赏有佳,有的人

华为G520联通版刷机包 高仿三星S5 UI风格美化 B老师作品

ROM介绍 基于官方EMUI固件制作,root权限 加入三星框架,TouchWiz启动器 修改默认程序图标为S5风格 默认字体使用更加明晰的微软雅黑 移植三星风格透明时钟插件 移植三星风格新浪天气插件自修改美化版 移植三星计算器.记事本 默认关闭垂直同步,运行更流畅 默认开启USB调试 缩短响应时间提升操作体验 在开发者模式中开启GPU强制渲染可以开启桌面切换3D效果 新浪天气自添加城市字体看不清,输入城市后用手指触摸屏幕区域即可在反色状态下看到并选择 _____________________

三星i9220刷机包 新蜂 V4.4

ROM介绍 源于官方:基于最新官方4.1.2底包制作. 深度精简:无预装APK,自带APK数量从原厂包的204个减少到109个,精简46%; 稳定流畅:经专业测试,与各种软件完美兼容,长时间稳定运行,安全流畅. 技术,大幅提升系统运行效率,开机时长从原厂18s减少到15s,启动时 内存占用从原厂517 MB减少到439MB,比原厂减少16%. 省电安全:深度优化手机待机时的电量消耗,手机待机时间比官方rom延长25%以上; [ROM特点]: [V4.4版本特性] 1.悬浮助手增加搜索快捷方式,方

HTC One 801e刷机包 4.4.3 港版6.13.708.1 root 小hi锁屏按钮

ROM介绍 本ROM仅适用于单卡版one,双卡机型.日版.S版.V版勿刷 ROM简介: 1.本ROM基于港版6.13.708.1制作 2.加入root权限,zipalign优化,apk(jar).odex全分离 3.精简国内不可用的应用程序 4.更新内置应用程序至最新 5.加入RE管理器[个人汉化版] 6.修改ROM为国行框架,实现国行天气等国行特性 7.开启归属地显示功能 8.加入联系人详情归属地显示 9.加入短信归属地显示 10.加入下拉农历显示 11.加入下拉锁屏按钮 12.加入相册拼图功