Linux镜像模式,Linux实现HiTool的合并镜像功能
Linux實現HiTool的合并鏡像功能
完成uboot、kernel、rootfs后,HiTool提供了界面工具來制作合并鏡像。通過生成的文件分析發現,這個功能主要就是合并了多個二進制文件,其中指定區域段數據不足時使用0x00補全。知道規則后那么我們就可以做自己的合并鏡像功能了,實現在完成編譯后直接生成一個完整燒寫鏡像。
方式
這部分邏輯比較簡單,因此就不用C語言編寫了,直接使用shell腳本實現。其中主要涉及的指令為cat重定向和dd,它們分別用來進行文件拼接和空白區域填充功能。
實現
切換路徑
最簡單的腳本形式,第一行指定解釋器,第二行移動路徑到我的鏡像輸出路徑
#!/bin/bash
cd out
刪除舊的文件
這里定義合并后的鏡像文件名稱,如果這個文件以及存在那么就把它刪除
outfile='img.flash'
if [ -f $outfile ]
then
rm -rf $outfile
fi
填充uboot
先設定生成的uboot文件名稱,然后獲取這個文件的長度,我這里鏡像中uboot設定的區域長度是1M大小。拼接文件可以使用符號進行追加。因為合并文件中數據不足區域要補0,計算得到空缺長度addlen后,可以使用dd指令從zero中獲取一塊相同長度的數據填上,這樣第一部分就完成啦。
file='u-boot-hi3516ev200.bin'
len=`stat -c "%s" $file`
alllen=$((1 * 1024 * 1024))
addlen=`expr $alllen - $len`
echo len=$len alllen=$alllen addlen=$addlen
cat $file $outfile
dd if=/dev/zero bs=$addlen count=1 $outfile
填充kernel
這部分語法與上面一致,其中kernel區域指定長度為4M大小。
file='uImage'
len=`stat -c "%s" $file`
alllen=$((4 * 1024 * 1024))
addlen=`expr $alllen - $len`
echo len=$len alllen=$alllen addlen=$addlen
cat $file $outfile
dd if=/dev/zero bs=$addlen count=1 $outfile
填充rootfs
file='rootfs_uclibc_64k.jffs2'
len=`stat -c "%s" $file`
alllen=$((11 * 1024 * 1024))
addlen=`expr $alllen - $len`
echo len=$len alllen=$alllen addlen=$addlen
cat $file $outfile
dd if=/dev/zero bs=$addlen count=1 $outfile
填充完根文件系統后,整個合并的鏡像文件就算完成了。接著可以打印一下輔助信息做簡說明要判斷,HiTool工具提供了按地址燒寫的操作,我們可以把需要填寫的十六進制文件長度也顯示出來。
echo
echo filepath: `pwd`/$outfile
alllen=`stat -c "%s" $outfile`
echo filesize: $alllen `printf "(HEX:%x)" $alllen`
echo
至此,把這些代碼都寫到一個腳本文件中,在make的時候調用一下就可以直接生成合并的鏡像文件發出去啦。測試一下運行效果
Linux實現HiTool的合并鏡像功能 相關文章
631 echarts調色盤:主題調色盤,全局調色盤,局部調色盤,漸變顏色的實現
03.調色盤的使用.html !DOCTYPE htmlhtml lang="en"head meta charset="UTF-8" meta name="viewport" content="width=device-width, initial-scale=1.0" meta http-equiv="X-UA-Compatible" content="ie=edge" titleDocument/title script src="lib/echarts.
js實現大數相加算法
1、題目:實現兩個大數相加。 2、算法思路: 大數可能超出任何一種整數類型,會引發溢出問題,所以用字符串的格式存儲大數: //js實現大數相加 function add(str1, str2) { if (Number(str1) Number(str2)) { var len = str1; } else { var len = str2; } var
Linux內核源碼分析 -- 構造新 cred -- prepare_kernel_cred
prepare_kernel_cred - Prepare a set of credentials for a kernel service 使用指定進程的 real_cred 去構造一個新的 cred,不是引用,不是引用,不是引用,而是創建一個新的 cred 源碼版本:Linux Kernel 5.9.9 prepare_kernel_cred /** * prepare_kernel
django 實現讀寫分離
主要目的:單個數據庫進行讀寫操作頻繁,降低速度,增加服務器讀寫數據庫壓力,為了解決這一問題,對數據庫進行讀寫分離,將大大提升項目的性能。其基本原理是: 讓主數據庫處理事務性的增刪改查,而從數據庫處理查詢操作,當主數據庫因一些事務性操作導致數
安卓自動化測試--Momkey 自定義腳本實現自動化
MonkeyScript MS 是官方提供的,除了像猴子一樣隨機亂點之外,還可以通過編寫腳本的形式,完成一系列固定的操作。MS 提供一整套完善的 API 來進行支持,主要還是基于坐標點的操作,包含常用的:點擊、長按、輸入、等待等操作。 腳本用法 1、LaunchActivity(p
Oracle-Rman數據備份
1、Linux系統下備份 開啟歸檔日志 linux 啟動歸檔日志 SQL SHUTDOWN IMMEDIATE; SQL STARTUP MOUNT; mkdir -p /u01/arch SQL alter system set log_archive_dest_1='location=/u01/arch'; SQL alter database archivelog; SQL alter database open; SQL arch
linux lvm分區在線擴容
轉載:https://www.cnblogs.com/tiantianhappy/p/10143663.html 前言: 對lvm格式的 / 分區進行在線擴容 1.添加新的磁盤 略 2.查詢磁盤情況 df -Thfdisk -l 3.如果沒有找到 cd /sys/class/scsi_host/echo "- - -" host0/scan #接口掃描新加磁盤即可,如果輸
SSH客戶端工具連接Linux(有的也可以連接Windows、mac、、iOS等多系統平臺)
要遠程操作Linux的話還是得靠SSH工具,一般來說,Linux是打開了默認22端口的SSH的服務端,如果我們要遠程它的話,就需要一個SSH客戶。 我對一款好用的工具主要需要滿足以下幾點。 (1)連接服務器快速,穩定; (2)支持sftp或者ftp文件傳輸; (3)支持X11
如何實現一個圣杯布局
什么是圣杯布局 圣杯布局是為了討論「三欄液態布局」的實現,最早的完美實現是由 Matthew Levine 在 2006 年寫的一篇文章 《In Search of the Holy Grail》 ,它主要講述了網頁中關于最佳圣杯的實現方法。 它有以下幾點要求: 上部(header)和下部(footer)各
springboot 如何使用自定義注解+aop實現全局日志持久化操作
1.自定一個注解 package com.hc.manager.common.aop.annotation; import java.lang.annotation.*; /** * LogAnnotation * * @author summer.chou * @version V1.0 * @date 2020年3月18日 */ @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME
總結
以上是生活随笔為你收集整理的Linux镜像模式,Linux实现HiTool的合并镜像功能的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 织梦dedecms5.7二级域名文章图片
- 下一篇: Windows 2003性能监视器中的计