Linux镜像模式,Linux实现HiTool的合并镜像功能
Linux實(shí)現(xiàn)HiTool的合并鏡像功能
完成uboot、kernel、rootfs后,HiTool提供了界面工具來制作合并鏡像。通過生成的文件分析發(fā)現(xiàn),這個功能主要就是合并了多個二進(jìn)制文件,其中指定區(qū)域段數(shù)據(jù)不足時使用0x00補(bǔ)全。知道規(guī)則后那么我們就可以做自己的合并鏡像功能了,實(shí)現(xiàn)在完成編譯后直接生成一個完整燒寫鏡像。
方式
這部分邏輯比較簡單,因此就不用C語言編寫了,直接使用shell腳本實(shí)現(xiàn)。其中主要涉及的指令為cat重定向和dd,它們分別用來進(jìn)行文件拼接和空白區(qū)域填充功能。
實(shí)現(xiàn)
切換路徑
最簡單的腳本形式,第一行指定解釋器,第二行移動路徑到我的鏡像輸出路徑
#!/bin/bash
cd out
刪除舊的文件
這里定義合并后的鏡像文件名稱,如果這個文件以及存在那么就把它刪除
outfile='img.flash'
if [ -f $outfile ]
then
rm -rf $outfile
fi
填充uboot
先設(shè)定生成的uboot文件名稱,然后獲取這個文件的長度,我這里鏡像中uboot設(shè)定的區(qū)域長度是1M大小。拼接文件可以使用符號進(jìn)行追加。因?yàn)楹喜⑽募袛?shù)據(jù)不足區(qū)域要補(bǔ)0,計(jì)算得到空缺長度addlen后,可以使用dd指令從zero中獲取一塊相同長度的數(shù)據(jù)填上,這樣第一部分就完成啦。
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區(qū)域指定長度為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
填充完根文件系統(tǒng)后,整個合并的鏡像文件就算完成了。接著可以打印一下輔助信息做簡說明要判斷,HiTool工具提供了按地址燒寫的操作,我們可以把需要填寫的十六進(jìn)制文件長度也顯示出來。
echo
echo filepath: `pwd`/$outfile
alllen=`stat -c "%s" $outfile`
echo filesize: $alllen `printf "(HEX:%x)" $alllen`
echo
至此,把這些代碼都寫到一個腳本文件中,在make的時候調(diào)用一下就可以直接生成合并的鏡像文件發(fā)出去啦。測試一下運(yùn)行效果
Linux實(shí)現(xiàn)HiTool的合并鏡像功能 相關(guān)文章
631 echarts調(diào)色盤:主題調(diào)色盤,全局調(diào)色盤,局部調(diào)色盤,漸變顏色的實(shí)現(xiàn)
03.調(diào)色盤的使用.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實(shí)現(xiàn)大數(shù)相加算法
1、題目:實(shí)現(xiàn)兩個大數(shù)相加。 2、算法思路: 大數(shù)可能超出任何一種整數(shù)類型,會引發(fā)溢出問題,所以用字符串的格式存儲大數(shù): //js實(shí)現(xiàn)大數(shù)相加 function add(str1, str2) { if (Number(str1) Number(str2)) { var len = str1; } else { var len = str2; } var
Linux內(nèi)核源碼分析 -- 構(gòu)造新 cred -- prepare_kernel_cred
prepare_kernel_cred - Prepare a set of credentials for a kernel service 使用指定進(jìn)程的 real_cred 去構(gòu)造一個新的 cred,不是引用,不是引用,不是引用,而是創(chuàng)建一個新的 cred 源碼版本:Linux Kernel 5.9.9 prepare_kernel_cred /** * prepare_kernel
django 實(shí)現(xiàn)讀寫分離
主要目的:單個數(shù)據(jù)庫進(jìn)行讀寫操作頻繁,降低速度,增加服務(wù)器讀寫數(shù)據(jù)庫壓力,為了解決這一問題,對數(shù)據(jù)庫進(jìn)行讀寫分離,將大大提升項(xiàng)目的性能。其基本原理是: 讓主數(shù)據(jù)庫處理事務(wù)性的增刪改查,而從數(shù)據(jù)庫處理查詢操作,當(dāng)主數(shù)據(jù)庫因一些事務(wù)性操作導(dǎo)致數(shù)
安卓自動化測試--Momkey 自定義腳本實(shí)現(xiàn)自動化
MonkeyScript MS 是官方提供的,除了像猴子一樣隨機(jī)亂點(diǎn)之外,還可以通過編寫腳本的形式,完成一系列固定的操作。MS 提供一整套完善的 API 來進(jìn)行支持,主要還是基于坐標(biāo)點(diǎn)的操作,包含常用的:點(diǎn)擊、長按、輸入、等待等操作。 腳本用法 1、LaunchActivity(p
Oracle-Rman數(shù)據(jù)備份
1、Linux系統(tǒng)下備份 開啟歸檔日志 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分區(qū)在線擴(kuò)容
轉(zhuǎn)載:https://www.cnblogs.com/tiantianhappy/p/10143663.html 前言: 對lvm格式的 / 分區(qū)進(jìn)行在線擴(kuò)容 1.添加新的磁盤 略 2.查詢磁盤情況 df -Thfdisk -l 3.如果沒有找到 cd /sys/class/scsi_host/echo "- - -" host0/scan #接口掃描新加磁盤即可,如果輸
SSH客戶端工具連接Linux(有的也可以連接Windows、mac、、iOS等多系統(tǒng)平臺)
要遠(yuǎn)程操作Linux的話還是得靠SSH工具,一般來說,Linux是打開了默認(rèn)22端口的SSH的服務(wù)端,如果我們要遠(yuǎn)程它的話,就需要一個SSH客戶。 我對一款好用的工具主要需要滿足以下幾點(diǎn)。 (1)連接服務(wù)器快速,穩(wěn)定; (2)支持sftp或者ftp文件傳輸; (3)支持X11
如何實(shí)現(xiàn)一個圣杯布局
什么是圣杯布局 圣杯布局是為了討論「三欄液態(tài)布局」的實(shí)現(xiàn),最早的完美實(shí)現(xiàn)是由 Matthew Levine 在 2006 年寫的一篇文章 《In Search of the Holy Grail》 ,它主要講述了網(wǎng)頁中關(guān)于最佳圣杯的實(shí)現(xiàn)方法。 它有以下幾點(diǎn)要求: 上部(header)和下部(footer)各
springboot 如何使用自定義注解+aop實(shí)現(xiàn)全局日志持久化操作
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
總結(jié)
以上是生活随笔為你收集整理的Linux镜像模式,Linux实现HiTool的合并镜像功能的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 织梦dedecms5.7二级域名文章图片
- 下一篇: 允許Linux的snmp服務被查詢