xloader bootlog access

grub 编译_安装_配置 grub 源代码可以从网上下,这里我用的是grub-1.98 1. 编译grub源文件 ./configure 使用configure 进行配置,产生相应的makefile文件。 make 使用make 编译 make install 如果configure 时候指定 --prefix= /install, 他会把编译出来的文件都放在/install 目录下 阅读详情

1. xloader 中除了把log输出到串口外,还备份存放在 &__LOG_START --- &__LOG_END中

void puts(char *buf)
{               
        uart_register_t *pUartRegs = (uart_register_t *) UART1_REG_START_ADDR;

        while (*buf)
        {
                while (IsTxfifoFull());
                
                *logBuffer++ = *buf;
                //备份到SRAM中
                if (logBuffer >= &__LOG_END)
                        logBuffer = &__LOG_START;
                //输出到串口
                pUartRegs->DATA.Data = *buf++;
        }
        *logBuffer = 0;
}       
logbuffer 的定义与初始化:

static char *logBuffer;
uart_error_t UART_Init(uart_baudrate_t baudrate, uart_parity_bit_t parity_bit,
                uart_stop_bits_t stop_bits, uart_data_bits_t data_bits)
{
        /* Variable to flush Rx fifo */
        volatile uint32_t dataflushed;

        uart_register_t *pUartRegs = (uart_register_t *) UART1_REG_START_ADDR;
        gpio_register_t *pGpio0Regs = (gpio_register_t *) GPIO0_REG_START_ADDR;

        //logBuffer在 UART_Init()中初始化
        logBuffer = &__LOG_START;
        memset(logBuffer, 0, &__LOG_END - logBuffer);
__LOG_START 和 __LOG_END 在default.dld 链接文件中定义:

/* The sizes of the stacks used by the application. NOTE: you need to adjust */
//LOG buffer的大小
LOG_SIZE       = 2048;
        GROUP : {
                __LOG_START = .;
                . += LOG_SIZE;
                __LOG_END = .;
2. 内核中,把bootlog 通过/sys 接口导出来:

/*
 * =============================================================================
 *   Cartesio Bootloader Log Access
 * =============================================================================
 */

#ifdef CONFIG_SYSFS
static ssize_t bootlog_show(struct kobject *kobj, struct kobj_attribute *a, char *buf)
{
        //锁定地址
        const u32 __base = IO_ADDRESS(CARTESIO_ESRAM_BASE) + 0x3800;
        u32 *b32 = (u32 *)buf;
        int i;

        //读2048个字节
        for(i = 0; i < 2048; i += 4)
                *b32++ = readl(__base + i);

        return 2048;
}

//创建只读文件 bootlog
static struct kobj_attribute bootlog_attr = __ATTR_RO(bootlog);
 
static struct attribute *st_attrs[] = {
        &bootlog_attr.attr,
        NULL,
};

static struct attribute_group st_attr_group = {
        .attrs = st_attrs,
        //group 表示会建立出 stmicro 目录,里面会有 bootlog选项
        .name = "stmicro",
};
#endif /* CONFIG_SYSFS */
这里通过 sys_create_group(kernel_kobj, &st_attr_group) 导出: sys_create_group(kernel_kobj, ) 会在 /sys/kernel/ 下建立出stmicro 目录,stmicro 目录想会有一个bootlog文件,是只读的.

static int __init cartesio_core_late_init(void)
{
        /*
         * Register core-specific platform devices depending on board devices
         */
        platform_add_devices(core_late_devices, ARRAY_SIZE(core_late_devices));

#ifdef CONFIG_SYSFS
        sysfs_create_group(kernel_kobj, &st_attr_group);
#endif

        return 0;
}
3. 用户空间读取bootlog:

int getlog()
{       
        char *log = harAPI_getLog();
        printf("x-loader logs :\n");
        
        while (*log)
        {
                printf("%s\n", log);
                log += strlen(log) + 1;
        }       
                
        return 0;
}
char *harAPI_getLog()
{       
        int fd;
        char logbuf[LOG_BUF_SIZE];
        char *buf;
        FILE *log;
                
        buf = logbuf;
        //打开bootlog文件
        log = fopen(BOOTLOG, "r");
        if(!log){
                printf("Open bootlog failed\n");
                return 0;
        }

        //读取文件到buf, 大小为2048
        if (fread(buf, LOG_BUF_SIZE, 1, log) != 1) {
                puts("Read bootlog failed");
        }
        
        fclose(log);
        return buf;
}  
#define LOG_BUF_SIZE     2048
#define BOOTLOG          "/sys/kernel/stmicro/bootlog"
这样就实现了bootloader log 从用户空间读取出来的功能。








Screenshot_2026-11-03-16-23-09-34.jpg 立即下载

相关推荐

研发流程后端开发工具,提示功能开发效率

后端开发工具

uboot中正常启动模式和recovery启动模式切换的实现

一个嵌入式系统,一般情况下都是正常启动模式,如果需要系统升级,或系统恢复出厂状态,就会需要用到recovery启动模式,它会从另外备份的kernel和rootfs启动。 在uboot中, check_recovery_mode()这个函数,就是用来实现这个功能的: 这个函数在lib_arm/board.c 的start_armboot (void)中被调用: void start_arm

3258

机器人具有扰动抑制功能的有限时间基于方位角的领航者-跟随者编队控制(Matlab代码实现)

内容概要:本文档标题为《Plecs全桥LLC谐振变换器仿真模型.txt》,但实际内容并未涉及该主题的具体技术细节或仿真建模过程。相反,文档实质是一份由科研服务团队发布的跨学科资源目录,集中展示了大量基于Matlab、Simulink、Python、PSCAD等平台实现的科研项目与算法开发案例,涵盖电力系统、无人机路径规划、微电网优化、状态估计、信号处理、车间调度、图像处理、通信技术、雷达追踪、智能优化算法等多个工程技术领域。每个条目以“【】”标注研究主题,并注明“Matlab代码实现”“Python代码实现”等形式,表明其为可提供技术支持与代码资源的服务项目。文档末尾频繁出现“完整资源下载:公众号——荔枝科研社”及百度网盘链接,明确体现出其作为科研辅助服务推广与引流工具的功能属性。; 适合人群:面向电气工程、自动化、控制科学与工程、计算机科学、智能制造、新能源、航空航天、通信工程及相关交叉学科的研究生、高校教师、科研人员及企业研发工程师。; 使用场景及目标:①为科研人员提供课题选题、技术路线设计与算法实现的参考范例;②辅助学生或研究人员完成课程设计、毕业论文、项目仿真与算法复现任务;③作为第三方技术服务团队的能力展示目录,便于潜在客户快速了解其在多领域提供的定制化仿真与算法开发服务范围。; 阅读建议:此文档并非传统意义上的学术论文或技术教程,而是一份高度碎片化、广告性质浓厚的资源索引清单。读者应忽略其误导性的文件名,将其视为一个综合性科研技术服务目录,重点关注自身研究方向相关的条目,并通过文末提供的公众号或网盘链接进一步获取具体代码与资料。同时,需注意甄别资源的技术质量、原创性与适用性,避免盲目依赖外部服务。

mtdparts_uboot分区

PDK7105_Nand> mtdparts   //查看分区情况 mtdparts variable not set, see 'help mtdparts' no partitions defined defaults: mtdids  : nand0=gen_nand.1 mtdparts: mtdparts=gen_nand.1:128k(env-nand0),4M(kerne

2417

科技中介服务机构如何打造高效、可复制的技术交易服务流程?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

高校技术转移办公室人员如何提升科研成果的市场推广与转化成功率?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

CFE 和BMC

broadcom 平台的 bcm956218x芯片,会使用2个bootloader 一个是BMC, 一个是CFE。 1. 两个bootloader之间可以用 “~.” 进行切换。 Switching to MIPS 2. BMC 命令如下: help show-bmc-info Print basic information of BMC. sh

1460

浙政钉(专有钉钉)门户免登(超详细)

钉钉家族 介绍浙政钉门户免登之前,首先搞清楚几个软件的关系,软件分别是:钉钉,专有钉钉,浙政钉 钉钉 是阿里巴巴集团专为中小企业打造的沟通和协同的多端平台。 专有钉钉 原名 政务钉钉,有更开放的设计能力、集成能力、更结构化协同产品、更定制化开发平台。支持专有化部署,数据落本地,更安全、客户可对该产品持牌运营、结构化编排,协助构建本地应用中心、提供移动应用全面安全保障体系。 浙政钉 为规范浙政钉整体架构体系,按照统分结合原则,由省政府办公厅统一设计整体工作界面和系统框架,统筹指导全省统建应用建设,各单

一缕南风的博客 2万+

u-boot 命令使用

=> print    //打印配置信息                       bootcmd=setenv bootargs root=/dev/ram rw console=$consoledev,$baudrate $othbootargs;tftp $ramdiskaddr $ramdiskfile;tftp $loadaddr $bootfile;tftp $fdtadd

1386

开源ISP实战(1)——基于Zynq7020的Vivado工程移植与调试

本文详细介绍了将开源ISP项目移植到正点原子Zynq7020开发板的实战过程。重点阐述了在Vivado中进行工程创建、IP核导入、Block Design框架搭建、时钟配置与管脚约束修改等关键步骤,并提供了系统联调与常见问题的排查思路,为FPGA图像处理开发者提供了完整的移植与调试指南。

weixin_29191081的博客 201

基于TI C2000的CCS安装与工程创建完整示例

手把手演示基于TI C2000系列的CCS安装过程及首个工程创建步骤,涵盖环境配置与常见问题处理,助力快速上手嵌入式开发,ccs安装和工程搭建不再难。

weixin_42476987的博客 970

uImage header for u-boot to read

kernel的压缩包uImage 会有一个header, 用来给u-boot 分析: u-boot中有具体定义,如下: typedef struct image_header { uint32_t ih_magic; /* Image Header Magic Number */ uint32_t ih_hcrc; /* Image Header CRC Checksum */

1271

Fluent新手避坑:遇到‘Floating point exception’别慌,这7个排查步骤帮你搞定

本文为Fluent新手提供了7个排查'Floating point exception'错误的实用步骤,包括边界条件检查、时间步长优化、求解器配置等关键技巧。通过系统化的诊断流程,帮助用户快速定位并解决CFD仿真中的浮点异常问题,提升计算稳定性。

weixin_42531886的博客 287

uboot nand write 烧写kernel image

烧写kernel:   PDK7105_Nand> nfs 80000000 192.168.1.175:/opt/STM/STLinux-2.3/devkit/sh4/target/vmlinux.ub Warning: MAC addresses don't match:         HW MAC address:  FF:FF:FF:FF:FF:FF         "etha

1216

微信小程序 - 解决报错 {“errcode“:41002,“errmsg“:“appid missing, rid: X“} 微信报错错误码errcode“:41002问题分析及解决教程(详细排查)

【微信小程序】报错{“errcode“:41002,“errmsg“:“appid missing, rid: 64e55770-67c1fb7e-027c5a70“}:【微信小程序】微信小程序登录请求出现appid missing提示,微信公众号{"errcode":41002,"errmsg":"appid missing"},微信 报错{“errcode“:41002,“errmsg“:“appid missing,微信小程序获取openid返回appid missing的问题,微信小程序提示Erro

🏆 前端领域优质创作者 5657

手把手教你学pcie--性能调优 - 中断机制优化

在PCIe系统开发中,中断机制是主机与设备之间通信的重要组成部分。然而,不当的中断设计可能导致CPU负载过高、延迟增加等问题。本文将详细介绍如何优化PCIe系统的中断机制,提升系统性能和响应速度。传统中断(INTx):通过专用引脚发送中断信号,可能引发冲突且效率较低。消息中断(MSI):通过内存写操作发送中断消息,避免冲突并提高效率。扩展消息中断(MSI-X):基于MSI改进,支持更多独立中断向量,适用于复杂场景。选择合适的中断模式对系统性能至关重要。

MHD0815的博客 291

setenv 设置环境变量

setenv (set environment variable) 功能说明:查询,显示,或设置环境变量。 语  法:setenv [变量名称][变量值] 补充说明:setenv为tsch中查询或设置环境变量的指令。 如 :  setenv ipaddr 192.168.0.37  setenv netmask 255.255.255.0  setenv gatewayip 1

921

RK3588 , 基于mpp 解码 Jpeg To RGB

本文介绍了在RK3588开发板上使用Rockchip MPP(Media Process Platform)硬件加速接口将JPEG图像解码为RGB格式的完整流程。主要包括三个关键步骤:1) 读取JPEG文件数据;2) 配置MPP解码器,包括初始化上下文、设置RGB888输出格式和解码参数;3) 执行解码任务并将结果保存为图像文件。通过硬件加速,该方法能高效完成JPEG到RGB的转换,适用于嵌入式多媒体处理场景。

J。 1212

uboot 和 kernel 中的分区修改

1.uboot中修改分区, 在/uboot/include/configs/pdk7105.h 中:   #ifdef CONFIG_CMD_NAND    /* NAND flash present ? */ # define CFG_MAX_NAND_DEVICE 1 # define NAND_MAX_CHIPS  CFG_MAX_NAND_DEVICE # define CFG

879

Unet++改进33:添加ConvolutionalGLU(2024最新改进方法)|紧凑的网络结构和高效的运算

由于残差连接的深度退化效应,许多依赖堆叠层进行信息交换的高效视觉变形模型往往不能形成足够的信息混合,导致视觉感知不自然。为了解决这个问题,在本文中,我们提出了聚合注意力,这是一种基于仿生设计的令牌混合器,它模拟生物中央凹视觉和连续眼运动,同时使特征映射上的每个令牌具有全局感知。此外,我们结合了可学习的令牌,与传统的查询和键交互,这进一步多样化了亲和矩阵的生成,而不仅仅依赖于查询和键之间的相似性。我们的方法不依赖于堆叠进行信息交换,从而有效地避免了深度退化,实现了自然的视觉感知。

AIcurator的博客 684

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

nand write 与nand write.jaffs的区别

关于nand flash操作的几个常用命令的含义   nand write:向Nand Flash写入数据,如果NandFlash相应的区域有坏块,则直接报错。   nand write.jffs2:向Nand Flash写入数据,如果NandFlash相应的区域有坏块,可以跳过坏块。   nand read:读取Nand Flash相应区域的数据,如果NandFlash相应的区域有坏

751

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

mkimage 命令找不到

mkimage 工具不是ubuntu自带的, 是u-boot中编译出来的: 如果使用make uImage 则能生成由uboot 引导的内核文件, 需要用到 uboot/tools/mkimage,可以在/etc/bashrc 文件末加入一下语句: export PATH:=$PATH:/usr/src/arm/u-boot-1.1.5/tools 这样就能直接引用mkimage

719

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

mkimage_制作镜像文件_参数说明

编译U-Boot成功后,在u-boot代码的tools目录中生成一些工具,比如mkimage。将它们复制到/usr/local/bin 目录下,就可以直接使用了。 现在我们编译内核需要用到mkimage来生成U-Boot格式的内核映像文件uImage 。 复制完成后在终端输入命令" mkimage "并回车,显示关于mkimage的提示信息,表示你现在已经可以使用此命令了:   Usage

680

uboot-mkimage

mkimage is used to make image. you should install uboot-mkimage at first: sudo apt-get install uboot-mkimage then you can use the mkimage command, such as: mkimage -d ~/share/harman/u-boot

594

对bootloader 环境变量的一些操作

bootloader会有一块环境变量分区,用来保存bootloader的参数,通常都会定义在bootloader附近的一块区域,大小一个block就够了,也就是128k。 1. loadEnv() --- 主程序调用该函数,用来读取env的内容 void loadEnv(uint32_t start, uint32_t end) { int err;

549
上一篇: 驱动中platform resource 和 porbe 之间的关系
下一篇: linux中测试LCD 显示功能
lamdoc
博客等级 码龄18年 155粉丝 655原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值