BSP开发
文章平均质量分 90
与光同程
如果想拥有从未有过的东西,就去做你从未做过的事
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【BSP开发经验】简易文件系统实现方式
../进程目录信息//进程打开文件信息/...int users;/结构体实例用户数量/int umask;/进程根目录和当前工作目录//目录项所在文件系统挂载信息,vfsmount.mnt//目录项指针/root成员表示进程访问内核根文件系统,通常为根文件系统的根节点,但也可以通过chroot()系统调用修改进程根目录。进程以绝对路径搜索文件时,从进程根目录开始。pwd成员表示进程当前工作目录。进程以相对路径访问文件时,将会从当前工作目录开始查找。原创 2024-05-23 22:14:27 · 1323 阅读 · 0 评论 -
【BSP开发经验】Linux内核开发调试手段
内核开发比用户空间开发更难的一个因素就是内核调试艰难。内核错误往往会导致系统宕机,很难保留出错时的现场。调试内核的关键在于你的对内核的深刻理解,同时需要掌握一些内核调试的基本手段。原创 2024-03-01 08:47:55 · 2306 阅读 · 1 评论 -
【BSP开发经验】Linux与uboot控制台串口
leadcore1861平台在到板后发现引出的串口控制台没有任何输出,询问厂家后了解到厂家代码指定串口4作为串口控制台,而我们使用了串口0,所以需要对uboot串口和linux串口控制台进行修改,指定到串口0输出。(3)board/开发板名字/serial.c、cpu/cpu名字/serial.c、drivers/serial/serial.c、drivers/serial/serial_xxx.c。next表示指向下一个串口设备的指针。在include/serial.h 中定义了表示串口设备的数据结构。原创 2024-03-01 08:53:34 · 2090 阅读 · 1 评论 -
【网络BSP开发经验】网络流量应用识别技术
针对上述问题,我们新框架需要完成以下几个重要的功能点:1)报文解析流程设备无关化2)输出报文解析统计数据3)流量重放整体应用识别框架可以分为三个部分:1)报文解析引擎:负责报文解析匹配,输入skb,输出flow_info,flow_info中包含匹配到的应用信息,特征库序号以及smac.然后基于次应用识别引擎开发跨平台报文分析工具,支持流量重放分析。2)策略执行器:根据报文解析引擎返回的结果对报文进行相关处理(DROP 或者 MARK)原创 2023-11-30 18:50:05 · 1281 阅读 · 0 评论 -
【BSP开发经验】uboot gpl框架开发经验
U-Boot 的 GPL 隔离是指在 U-Boot 中,将 GPL 认为具有侵权风险的代码与非 GPL 代码分隔开来,以避免 GPL 认为有侵权风险的代码“污染”了非 GPL 代码,从而使得整个 U-Boot 项目遵守 GPL 协议,保障代码的版权和使用权。第 3 行的“.text”是段名(代码段),后面的冒号是语法要求,冒号后面的大括号里面可以填上要链接到“.text”这个段里面的所有文件,“(.text)”中的“”是通配符,表示所有输入文件的.text段都放到“.text”中。链接脚本是文本文件。原创 2023-11-30 15:44:11 · 1167 阅读 · 0 评论 -
【网络BSP开发经验】Linux gmac驱动调试
网络设备驱动是linux内核中三大类设备驱动之一,它用来完成高层网络协议的底层数据传输及设备控制。网络设备与其他两种设备的区别:网络接口不存在于linux的文件系统中,及/dev下没有设备文件,用户通过套接口socket函数使用网络。网络除了响应来自内核的请求外,还需要处理外界的异步数据除了数据处理,网络设备还要完成地址设置、配置网络参数及流量统计等管理任务。原创 2023-08-29 17:52:57 · 3220 阅读 · 0 评论 -
【网络BSP开发经验】交换芯片驱动开发1(RTL8306MB交换芯片驱动开发)
网络BSP 交换芯片驱动开发原创 2023-03-15 22:34:37 · 8985 阅读 · 2 评论 -
【Linux内核代码分析1】Linux时间子系统及HRTIMER实现
(1)嵌入式设备需要较好的电源管理策略。传统的linux会有一个周期性的时钟,即便是系统无事可做的时候也要醒来,这样导致系统不断的从低功耗(idle)状态进入高功耗的状态。这样的设计不符合电源管理的需求。(2)多媒体的应用程序需要非常精确的timer,例如为了避免视频的跳帧、音频回放中的跳动,这些需要系统提供足够精度的timer和低精度timer不同,高精度timer使用了人类的最直观的时间单位ns(低精度timer使用的tick是和内核配置相关,不够直接)。本质上linux早期时间子系统如图kerne原创 2022-12-03 23:55:25 · 2034 阅读 · 0 评论 -
【LINUX驱动框架学习】Linux GPIO驱动以及底层实现方式
GPIO(通用目的输入/输出端口)是一种灵活的软件控制的数字信号。大多数的嵌入式处理器都引出一组或多组的 GPIO,并且部分普通管脚通过配置可以复用为 GPIO。利用可编程逻辑器件,或总线(如 I 2 C、SPI)转 GPIO 芯片,也可以扩展系统的 GPIO。不管是何种 GPIO,GPIOLIB 为内核和用户层都提供了标准的操作方法。GPIOLIB 的接口十分简洁。在 GPIOLIB,所有的 GPIO 都是用整形的 GPIO 编号标识。只要获得要操作 GPIO 的编号,就可以调用 GPIOLIB原创 2021-04-02 21:32:00 · 5503 阅读 · 0 评论 -
【嵌入式Linux开发学习】基于TFTP的通用代码烧写方式
对于从事嵌入式行业的人来说,进行代码升级一定不会陌生。相对于单片机相对单一的烧写方式,嵌入式Linux开发中的烧写方式就丰富了许多。常见的比如串口烧写,USB烧写(fastboot),sd卡烧写。原创 2022-10-24 23:47:18 · 1316 阅读 · 0 评论 -
【嵌入式Linux开发学习】rootfs通过ramfs挂载技巧
在使用initramfs的过程中我感觉相比于传统的我们直接挂载块设备/dev/mmcblk0 /mmc/sda1 之类的挂载点来看相比于读写块设备 ,读写ram总归是会快很多的,系统性能会有所提高。可以避免一些需要频繁擦写数据的情况对于块设备的消耗,可以提升设备寿命,对于不怎么开关机长期保持上电状态的设备比如交换机,网桥之类尤其如此。原创 2022-10-23 02:22:46 · 1894 阅读 · 0 评论 -
【BSP开发学习6】模块符号的导入与导出以及使用模块规避GPL传染性
依据GPL 的相关规定,如果原始授权人采用GPL来发布自己的作品,那么无论该作品的任何衍生作品,都要遵从GPL 的规则,尽管你对于该衍生作品拥有著作权,但是你也不可以因此认为它是你的心血而另立新规,可谓“子子孙孙无穷尽也”。GPL 下的软件,是允许作为学习来复制使用的。由于相当多的内核符号都是以EXPORT_SYMBOL_GPL()导出的,所以历史上曾经有一些公司把内核的EXPORT_SYMBOL_GPL()直接改为EXPORT_SYMBOL(),然后将修改后的内核以GPL形式发布。,就可以方便的调用了。原创 2022-08-21 00:18:11 · 1370 阅读 · 0 评论 -
【BSP开发之kernel】Linux启动流程以及编译流程分析
uImage 是老版本 uboot 专用的镜像文件,uImag 是在 zImage 前面加了一个长度为 64。展开就是 @ make -f ./scripts/Makefile.build obj=$@arch/arm/kernel/vmlinux.lds 就是整个 Linux 的链接脚本。字节的“头”,这个头信息描述了该镜像文件的类型、加载位置、生成时间、大小等信息。用 objcopy 取消掉 vmlinux 中的一些其他信息。zImage 是经过 gzip 压缩后的 Image。...原创 2022-08-05 22:50:54 · 1403 阅读 · 0 评论 -
【BSP开发学习5】GPIO子系统
gpio_request 函数用于申请一个 GPIO 管脚,在使用一个 GPIO 之前一定要使用 gpio_request。如果不使用某个 GPIO 了,那么就可以调用 gpio_free 函数进行释放。因为权限问题,所以没有办法手动添加设备节点,也没有mdev,udev进行设备节点的管理,可以使用echo 8 > /proc/sys/kernel/printk调整打印等级。此函数用于设置某个 GPIO 的值,此函数是个宏,定义如下。所以需要手动添加设备节点。打印问题,默认打印等级很低。...原创 2022-08-05 22:47:44 · 8844 阅读 · 2 评论 -
【BSP开发学习4】Linux 内核时间管理
Linux 内核中有大量的函数需要时间管理,比如周期性的调度程序、延时程序、对于我们驱动编写者来说最常用的定时器。硬件定时器提供时钟源,时钟源的频率可以设置, 设置好以后就周期性的产生定时中断,系统使用定时中断来计时。中断周期性产生的频率就是系统频率,也叫做节拍率(tick rate)(有的资料也叫系统频率),比如 1000Hz,100Hz 等等说的就是系统节拍率。...原创 2022-08-05 22:46:36 · 974 阅读 · 0 评论 -
【BSP开发学习3】内核并发处理
可能引起Linux 内存混乱的原因。原创 2022-08-05 22:45:33 · 390 阅读 · 0 评论 -
【BSP开发学习2】平台设备驱动
为什么要使用设备驱动模型我对于Linux 引入设备驱动模型的理解是就在于将一份驱动代码分成两份,一份代码是通用的也就是驱动driver ,令一份代码不是通用的会随着板子CPU的不同,发生改变。通过sys文件系统下面的目录和文件可以清楚的了解到Linux系统中的设备情况和组织关系。sysfs提供一种可以显式描述内核对象,对象属性以及对象关系的方法。树形结构中每一个目录与一个kobject对象相对应,其包含了目录的组织结构和名字等信息。在Linux系统中, kobject结构体是组成设备驱动模型的基本结构原创 2022-08-05 22:44:35 · 3110 阅读 · 0 评论 -
【BSP开发学习1】通用字符设备开发
8 };在 cdev 中有两个重要的成员变量:ops 和 dev,这两个就是字符设备文件操作函数集合file_operations 以及设备号 dev_t。编写字符设备驱动之前需要定义一个 cdev 结构体变量,这个变量就表示一个字符设备。...原创 2022-08-05 22:43:50 · 556 阅读 · 0 评论 -
【Linux开发基础知识】shell语法整理
变量定义 a=1变量引用 $a ${a}在Makefile 中 对于Makefile 变量的引用 使用Makefile 下的方式$(a)对于shell 中的变量使用$${a}数组名=(元素1 元素2 元素3 … 元素n)原创 2022-08-05 22:42:44 · 770 阅读 · 0 评论 -
【Linux开发基础知识】Makefile语法
预定义变量作用$*不包含扩展名的目标文件名称$+所有的依赖文件,以空格分开,并以出现的先后为序,可能包含重复的依赖文件。$(第一个依赖文件的名称。$?所有的依赖文件,以空格分开,这些依赖文件的修改日期比目标的创建日期晚。$@目标的完整名称。$^所有的依赖文件,以空格分开,不包含重复的依赖文件。如果Makefile中出现一些相同命令序列,那么我们可以为这些相同的命令序列定义一个变量。endef这里,“run-yacc”是这个命令包的名字,其不要和Makefile中的变量重名。...原创 2022-08-05 22:41:57 · 659 阅读 · 0 评论 -
【BSP开发之uboot】uboot常用命令以及代码分析
函数中通过initcall_run_list运行initcall_run_list列表中的函数,可以看一下init_sequence_r包括了各种板级的初始化,最终运行run_main_loop。第一阶段主要由start.s运行并实现相应的初始化,定义程序入口地址,初始化CPU,初始化内存,最后调用_main到第二阶段的板级别初始化部分。第二阶段主要是C语言编写,对于硬件内存分配,初始化硬件设备,串口初始化,显示设备初始化,运行环境初始化等等,最后启动内核。...原创 2022-08-05 22:40:42 · 2446 阅读 · 0 评论 -
[Linux嵌入式开发]Linux常用命令
Linux BSP开发通用技术原创 2022-08-05 22:39:01 · 525 阅读 · 1 评论
分享