嵌入式Linux修改启动时内核打印信息

文章讲述了如何修改开阳1668E的BSP编译,以更改开机时的Linux版本信息。主要涉及内核配置文件和linux/init/version.c、linux/scripts/mkcompile_h两个文件的修改,通过调整这些设置,可以将开机信息中的主机名和用户名替换为自定义的内容,使信息更符合目标板的要求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:

        最近在做开阳1668E的BSP编译工作,但是一开机就会看到一串打印信息,感觉和自己的目标板不符合,于是就想把它们改为符合自己目标板的信息。

Booting Linux on physical CPU 0x0
Linux version 4.19.192 (wujun@zs-PowerEdge-R740) (gcc version 7.3.1 20180425 [linaro-7.3-2018.05 revision d29120a424ecfbc167ef90065c0eeb7f91977701] (Linaro GCC 7.3-2018.05))
 #45 SMP Fri Apr 28 10:52:37 CST 2023

 解决思路:

经过了解,该信息是由文件linux下的文件和内核配置得到的。

linux/init/version.c
linux/scripts/mkcompile_h

1.修改内核配置:

 

这里可以配置,也可以不配置 。如果配置的话会在Linux version 4.19.192后面加上你的配置,如下图:

2. 修改linux/scripts/mkcompile_h

以Linux version 4.19.192 (wujun@zs-PowerEdge-R740)为例:

if test -z "$KBUILD_BUILD_USER"; then
        LINUX_COMPILE_BY="ZsOS"
else
        LINUX_COMPILE_BY="ZsOS" # 修改@符号前面的
fi
if test -z "$KBUILD_BUILD_HOST"; then
        LINUX_COMPILE_HOST="PARS"
else
        LINUX_COMPILE_HOST="PARS" # 修改@符号后面的
fi

3.修改 linux/init/version.c


/* FIXED STRINGS! Don't touch! */
/*const char linux_banner[] =
        "Linux version " UTS_RELEASE " (" LINUX_COMPILE_BY "@"
        LINUX_COMPILE_HOST ") (" LINUX_COMPILER ") " UTS_VERSION "\n";*/
//上面是原来的,修改为下面的
const char linux_banner[] =
        "Linux version " UTS_RELEASE " (" LINUX_COMPILE_BY "@"
        LINUX_COMPILE_HOST ") (ARK1668E) " UTS_VERSION "\n";

最终效果:

看起来就清爽很多 

移植LVGL图形库到ARK1668e硬件平台涉及多个步骤,包括环境准备、硬件抽象层配置、显示和输入设备驱动适配,以及最终的测试与优化。以下是详细的移植指南: ### 1. 环境准备 首先需要搭建适用于ARK1668e的开发环境。通常需要安装交叉编译工具链,并确保能够编译和烧录到目标硬件上。建议参考芯片厂商提供的SDK文档,获取具体的开发工具安装指南。 ### 2. LVGL库的获取与配置 从[LVGL官方GitHub仓库](https://github.com/lvgl/lvgl)获取最新的LVGL源码。可以通过以下命令克隆仓库: ```bash git clone https://github.com/lvgl/lvgl.git ``` 进入`lvgl`目录后,可以使用`make menuconfig`或者手动修改`lv_conf.h`文件来配置LVGL的核心功能,如颜色深度、显示缓冲区大小、输入设备类型等[^1]。 ### 3. 硬件抽象层(HAL)适配 为了使LVGL能够在ARK1668e上运行,需要实现LVGL的HAL接口。具体包括: - **显示驱动**:实现`lv_disp_drv_t`结构体,定义显示刷新回调函数`flush_cb`。需要根据ARK1668e的LCD控制器特性编写底层显示驱动,确保能够正确地将帧缓冲区的内容发送到显示屏。 - **输入设备驱动**:如果使用触摸屏或其他输入设备,需实现`lv_indev_drv_t`结构体,并注册相应的输入事件处理函数,如`read_cb`。对于触摸屏,通常需要读取坐标和状态信息。 ### 4. 内存管理 LVGL默认使用动态内存分配,但在嵌入式系统中,可能需要自定义内存分配策略以提高性能或满足实时性要求。可以在`lv_conf.h`中配置`LV_MEM_CUSTOM`宏,启用自定义内存管理函数,如`malloc`和`free`的替代实现。 ### 5. 定时器支持 LVGL依赖于一个全局定时器来处理动画、任务调度等功能。需要在ARK1668e平台上实现一个高精度的定时器中断服务程序,并在每次中断时调用`lv_tick_inc()`函数,更新LVGL内部的时间计数器。 ### 6. 系统初始化 在主程序中,首先初始化硬件平台,包括时钟、GPIO、LCD控制器等外设。然后初始化LVGL库,调用`lv_init()`函数。接下来,初始化显示和输入设备的HAL驱动,最后启动LVGL的任务调度器。 ### 7. 测试与调试 完成上述步骤后,可以编写一个简单的测试用例,例如创建一个按钮或滑动条,验证LVGL的基本功能是否正常工作。同时,使用调试工具检查内存使用情况、CPU占用率等性能指标,确保系统稳定可靠。 ### 示例代码 以下是一个简化的LVGL初始化和显示驱动注册示例: ```c #include "lvgl/lvgl.h" // 显示缓冲区定义 static lv_color_t buf[LV_HOR_RES_MAX * 10]; // 缓冲区大小可根据实际情况调整 // 显示刷新回调函数 void my_flush_cb(lv_disp_drv_t * disp_drv, const lv_area_t * area, lv_color_t * color_p) { // 实现具体的显示刷新逻辑,将color_p指向的数据写入LCD控制器 // ... // 标记区域已刷新 lv_disp_flush_ready(disp_drv); } int main(void) { // 初始化硬件平台 hardware_init(); // 初始化LVGL lv_init(); // 初始化显示驱动 lv_disp_drv_t disp_drv; lv_disp_drv_init(&disp_drv); disp_drv.flush_cb = my_flush_cb; disp_drv.buffer = &buf; disp_drv.hor_res = 800; // 水平分辨率 disp_drv.ver_res = 480; // 垂直分辨率 lv_disp_drv_register(&disp_drv); // 创建一个简单的按钮 lv_obj_t * btn = lv_btn_create(lv_scr_act(), NULL); lv_obj_set_pos(btn, 10, 10); lv_obj_set_size(btn, 100, 50); // 启动LVGL任务调度器 while (1) { lv_task_handler(); lv_tick_inc(5); // 每5毫秒调用一次 } } ``` ###
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Liu-Eleven

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值