8953系列----在aboot中读取boot version

    在aboot.c中

void get_image_version(unsigned char *buf)
{
unsigned long long ptn = 0;
int index = INVALID_PTN;
char *src_ptr;
char *dest_str;
uint32_t ret = 0,blocksize;


src_ptr = malloc(PAGE_SIZE + 1);   //先搞个buffer
memset((void*)src_ptr,0,PAGE_SIZE + 1);


index = partition_get_index("boot");   //获取boot在partition中的位置
if(!index)
{
dprintf(CRITICAL,"get boot index failed!\n");
goto error;
}


mmc_set_lun(partition_get_lun(index));


ptn = partition_get_offset(index);   //获取offset
if(!ptn)
{
dprintf(CRITICAL,"get boot sector offset failed!\n");
goto error;
}


blocksize = mmc_get_device_blocksize();  //获取block大小


if(!src_ptr)
{
dprintf(CRITICAL, "Failed to allocate memory for src_ptr!\n");
goto error;
}


ret = mmc_read(ptn,(uint32_t*)src_ptr,blocksize);  //读取内容
if(ret)
{
dprintf(CRITICAL,"read boot header info failed!\n");
goto error;
}


dest_str = findstr_in_binheader(src_ptr,"buildv=",512);  //找到对应的字符串
if(!dest_str)
{
dprintf(CRITICAL,"get image version failed.\n");
goto error;
}


snprintf((char*)buf, MAX_RSP_SIZE, "%s",dest_str);


error:


free(src_ptr);


return;
}


char* findstr_in_binheader(char* src,const char* target,int src_size)
{
char *head,*tail,*pos,*result;
head = src;
tail = src + src_size;


for(pos = head; pos != tail;pos++)
{
if(!*pos)
continue;
if((result = strstr(pos,target)))
return result + strlen(target);
}
return NULL;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
运行 清除fastboot进磁盘操作.bat 接着电脑自动安装驱动(不会自动安装的驱动路径在MiFlash安装目录下) 这时就进入磁盘模式了,接着就可以用DiskGenius,分区助手专业版和MiFlash进行操作了(还可以用DiskGenius做数据备份) 用MiFlash刷机(目的是为了还原删除的aboot也可以用我提供的备份还原)刷完后关MiFlash,可别拔掉手机哦 呵呵 补充:没用miflash刷机的一定要要还原aboot分区要不后面改好了启动不来(一定要刷机要不你自己备份的也是清除的分区里面没数据是没用的) 3. 打开DiskGenius要操作的磁盘是QualcommMMCStorage(里面有27个分区的就是) 认为有必要的备份好整个分区表和分区(极力推荐备份)。 也可以用我提供的备份(有些分区是各手机私有的不能用我的备份分别是ssd dbi bk1 bk2 modemst1 modemst2 fsc bk3 fsg bk4 bk5 这11个分区同时也是不可动的)。 以下是两种分区方法 选其一种即可 1。 用分区助手无损移动分区 2。 用DiskGenius删分区再重建 第一种: 方法删除 system1 boot1 modem1 userdata四个分区就可以了。(认为有必要的懂得可以删其他分区) 用分区助手移动分区把未分配空间集合在右边也就是userdata分区那一边保存修改(提交)然后用DiskGenius新建分区userdata把剩下的空间都给它 文件系统类型linux data partion 勾上对齐到下列扇区数的整数倍数值是8 详细里面的分区名userdata 再点上无盘符。 分区建好保存更改(分区名一定要是userdata)。 换到分区助手格式化userdata分区 格式ext3其他默认(可以开机后进fastboot用命令格式化此分区命令是fastboot format userdata)。
在Spring Boot项目使用Spark 2.0,需要进行以下步骤: 1. 添加Spark依赖 在pom.xml文件添加以下依赖: ```xml <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-core_2.11</artifactId> <version>2.0.0</version> </dependency> ``` 2. 配置Spark环境 在Spring Boot项目,可以使用`SparkConf`类来配置Spark环境,如下所示: ```java @Configuration public class SparkConfig { @Bean public SparkConf sparkConf() { return new SparkConf() .setAppName("spring-boot-spark") .setMaster("local[*]"); } @Bean public JavaSparkContext sparkContext() { return new JavaSparkContext(sparkConf()); } } ``` 这里使用`@Configuration`注解创建一个Spark配置类,并且创建了一个`SparkConf`类的Bean,用于配置Spark环境。在上面的例子,我们设置了应用程序的名称为`spring-boot-spark`,并且使用本地模式运行Spark。 3. 编写Spark任务 在Spring Boot项目,可以使用Spring的`@Service`注解创建一个Spark任务类,例如: ```java @Service public class WordCountTask { @Autowired private JavaSparkContext sparkContext; public List<Tuple2<String, Integer>> countWords(String filePath) { JavaRDD<String> lines = sparkContext.textFile(filePath); JavaRDD<String> words = lines.flatMap(line -> Arrays.asList(line.split(" ")).iterator()); JavaPairRDD<String, Integer> wordCount = words.mapToPair(word -> new Tuple2<>(word, 1)).reduceByKey((a, b) -> a + b); return wordCount.collect(); } } ``` 在上面的例子,我们使用了Spark的API来读取一个文件,并统计每个单词出现的次数。这个任务会返回一个包含单词和出现次数的元组列表。 4. 调用Spark任务 在Spring Boot项目,可以使用Spring的`@RestController`注解创建一个RESTful API,用于调用Spark任务,例如: ```java @RestController @RequestMapping("/word-count") public class WordCountController { @Autowired private WordCountTask wordCountTask; @GetMapping("/{filePath}") public List<Tuple2<String, Integer>> countWords(@PathVariable String filePath) { return wordCountTask.countWords(filePath); } } ``` 在上面的例子,我们创建了一个`/word-count`的API,用于调用`WordCountTask`任务,并传入文件路径作为参数。 5. 运行应用程序 最后,可以使用Spring Boot的`@SpringBootApplication`注解创建一个启动类,用于运行整个应用程序,例如: ```java @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` 在上面的例子,我们创建了一个`Application`类,并使用`SpringApplication.run`方法运行整个应用程序。 至此,在Spring Boot项目使用Spark 2.0的步骤就完成了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值