当前位置: 首页 > news >正文

静态加载法

⼀、向内核添加新功能

静态加载法

  • Kconfig相当于make menuconfig中的界面配置文件
  • <M>modules 会被编译成独立的内核模块文件(.ko文件)
  • Kconfig决定menuconfig界面内的内容  tristate决定对应的菜单项有几种选择
  • config 后的菜单项关联到Makefile ,makefile后的.o文件对应新功能的源码文件
  • 在menuconfig 内做好相应的选择后,将会在顶层目录生成一个.config文件,后面make uImage会依据.config文件的内容决定哪些会参与编译到uImage
  • Kconfig 相当于make menuconfig 界面配置文件

1.1 静态加载法:

即新功能源码与内核其它代码一起编译进uImage文件内
1. 新功能源码与Linux内核源码在同一目录结构下 
在linux-3.14/driver/char/目录下编写myhello.c,文件内容如下:

#include <linux/module.h> 
#include <linux/kernel.h>int __init myhello_init(void)
{printk("#####################################################\n");printk("#####################################################\n");printk("#####################################################\n");printk("#####################################################\n");printk("myhello is running\n"); printk("#####################################################\n");printk("#####################################################\n");printk("#####################################################\n");printk("#####################################################\n");return 0;
}void __exit myhello_exit(void)
{printk("myhello will exit\n");
}
MODULE_LICENSE("GPL"); 
module_init(myhello_init); 
module_exit(myhello_exit);

2. 给新功能代码配置Kconfig 

#进入myhello.c的同级目录
cd  ~/fs4412/linux-3.14/drivers/char

vim Kconfig 
#39行处添加如下内容: 
config MY_HELLO
tristate "This is a hello test" 
help
This is a test for kernel new function


3. 给新功能代码改写Makefile 


#进入myhello.c的同级目录
cd  ~/fs4412/linux-3.14/drivers/char

vim Makefile 
#拷贝18行,粘贴在下一行,修改成: 
obj-$(CONFIG_MY_HELLO)     += myhello.o


4. make menuconfig 界面里将新功能对应的那项选择成<*>


cd  ~/fs4412/linux-3.14
make menuconfig
#make menuconfig如果出错,一般是两个原因: 
#1. libncurses5-dev没安装
#2. 命令行界面太小(太矮或太窄或字体太大了)
menuconfig01 
menuconfig02 
menuconfig03 
menuconfig04


5. make uImage


6. cp arch/arm/boot/uImage /tftpboot


7. 启动开发板观察串口终端中的打印信息
myhello静态

http://www.dtcms.com/a/596726.html

相关文章:

  • 规范使用指针
  • 工业实时数据库选型指南:深度解析紫金桥 vs TDengine
  • DNS主从服务器的配置
  • DDR4 4.7 Write Leveling
  • 云手机通常使用什么架构
  • 幽冥大陆(十七)手机摄像头注册到电脑——东方仙盟炼气期
  • DNS记录更新后为什么还是访问不到新服务器?
  • 高并发场景下的核心技术挑战与应对思路
  • 网站建设报价清单wordpress free cdn
  • 关于comfyui的秋叶lora-scripts训练器安装和TensorBoard显示问题
  • Docker(K8S)容器架构教程(视频教程)
  • 深度解析EasyGBS全场景视频调阅功能与行业实战应用
  • 网站加强阵地建设与管理企业公示信息年报
  • AI 智能体的终极记忆方案?来认识一下 Graphiti
  • git 安装教程
  • 【训练技巧】冻结模型参数在模型微调、迁移学习等场景的应用及举例说明
  • 【shell】变量内容的增加、删除、替换、测试取代
  • 【FPGA+DSP系列】——MATLAB simulink仿真三相桥式全控整流电路
  • es 书籍检索-下篇 - 内网部署工程
  • Vue3 高级性能优化
  • 含汞废水深度处理技术实践:Tulsimer® 树脂在聚氯乙烯行业的工程应用
  • 制作简单公司网站流程用帝国cms做的网站首页
  • Java 函数式编程 | 深入探讨其应用与优势
  • 福建整站优化企业车辆管理系统平台
  • 【多模态大模型面经】 Transformer 专题面经
  • 【微服务知识】SpringCloudGateway结合Sentinel实现服务的限流,熔断与降级
  • Python基础教学:Python中enumerate函数的使用方法-由Deepseek产生
  • 算法基础篇:(六)基础算法之双指针 —— 从暴力到高效的优化艺术
  • 家庭网络搭建网站做网站能赚钱吗 知乎
  • 江苏省住房与城乡建设厅网站首页广告网站建设报价