- 博客(109)
- 收藏
- 关注
原创 SYLIXOS 龙芯2K1000 LCD屏参配置(2)
注意事项:操作的时钟寄存器:#define LS2K_PIX0_PLL (0xffffffffbfe104b0)#define LS2K_PIX1_PLL (0xffffffffbfe104c0)/********************************************************......
2022-05-23 12:36:31
639
原创 SYLIXOS 龙芯2K1000 LCD屏参配置(1)
1. LCD 显示原理... 12. FB驱动屏参代码... 33. 添加新屏示类... 5LCD 显示原理LCD(Liquid Crystal Display)是利用液晶分子的物理结构和光学特性进行显示的一种技术。液晶分子具有以下的特性:。液晶分子是介于固体和液体之间的一种棒状结构的大分子物质; 在自然形态下具有光学各向异性的特点,在电(磁)场作用下,呈各向同性的特点。 LCD 的显示原理是利用了液晶的特性,将液晶置于两片导电玻璃基板之间,在上下玻璃基板的两个电...
2022-05-23 11:12:08
1426
转载 LCD参数解释及计算
转载地址:http://blog.youkuaiyun.com/longxiaowu/article/details/24319933Linux内核的amba lcd控制器使用clcd_panel结构体表示一个LCD屏的硬件参数:/* include/linux/fb.h */struct fb_videomode {const char *name; /* optional */u32 refresh; /* optional */u32 xres;u32 yres;u32 pixclock;
2022-05-23 10:52:36
890
原创 SylixOS,协议栈中函数地址转换
netprp_t *netprp = (netprp_t *)netdev->priv; netprp_eth_t *netprp_eth; LW_LIST_LINE *pline; char *data = NULL; u16_t length = p->len; int ret; struct ethhdr *eh = (struct ethhdr *)p->payload; struct i...
2022-04-20 10:25:00
161
原创 SylixOS lwip 相关函数
in_addr_t inet_addr(const char *cp);若字符串有效则将字符串转换为32位二进制网络字节序的IPV4地址,否则为INADDR_NONE;列子:ip4_addr_t ip4 ip4.addr = inet_addr("192.168.2.55");
2022-03-14 00:05:31
133
原创 SylixOS同步互斥之自旋锁(三)
1.基本作用在前面我们介绍过互斥锁用于共享资源的互斥访问,但是互斥锁有一个缺点就是资源开销比较大。因为获取互斥锁和释放互斥锁过程中都需要进出内核,如果共享资源自身不是很大的话,比如可能就是修改一个变量的值,代码里也就几行,这个时候就可以考虑使用自旋锁来实现互斥访问。自旋锁顾名思义,当锁已经被别人获取的时候,再次去获取锁的人会一直“自旋”,也就是一直在检测锁的状态直到锁被释放。自旋锁一般用在多核的情况下,比如现在有两个线程分别跑在两个核上,然后都要去访问共享资源,如下图所示。cpu核0上运行线程
2022-02-10 13:46:49
625
原创 SylixOS同步互斥之二进制信号量(二)
1. 基本作用上一章节我们介绍了互斥锁,用于“共享资源”的互斥访问,在驱动开发中我们有时候需要等待某种资源准备好之后才能继续执行代码,这就需要使用同步机制来实现这个目的。比如某个应用想要读取AD转换数据,但是这时候转换还未完成,那么就有两种基本处理方法:一是轮询某个寄存器直到AD转换完成;二是将当前线程阻塞,等待AD转换完成后在中断处理中唤醒。第一种方法由于一直在轮询寄存器,cpu的占用率比较高,其他线程得不到运行,cpu利用率较低;第二种方法由于线程阻塞住之后系统可以调度其他的线程运行,cpu利用率较
2022-02-10 13:26:13
484
原创 SylixOS同步互斥之互斥锁(一)
从本篇开始往后的文章主要介绍下SylixOS常用的编程接口,比如同步互斥接口、动态内存相关类接口、Cache操作接口等等,主要聚焦于驱动开发中经常使用到的内核接口。1. 基本作用互斥锁在SylixOS中也被叫做互斥信号量,它的主要作用就是保护一段“共享资源”避免被同时访问,从而达到互斥的效果。比如在一般的网卡或者SD卡驱动中,硬件模块的数据收发都是通过描述符来进行设置的,当一个线程或者进程在更新或者准备这些描述符数据时,这些描述符是不可以再被别的线程来访问的,不然的话你前面一个线程设置好的描述符还没
2022-02-10 11:58:16
647
原创 SylixOS 同步互斥之原子操作(四)
1. 基本作用在各类操作系统提供的接口中,除了我们之前学习的互斥锁和信号量类接口用于实现互斥或者同步的目的外,也基本都会提供一类原子操作的接口,一般接口都带有atomic_xxx字样。原子操作类接口一般用于某个变量需要改变的情况,比如变量值需要增加、减少或者逻辑运算等等,但是如果这些操作是用高级语言编写的,比如C语言等,一句简单的“count++”被编译器编译后可能会生成n条指令来完成这一个操作,那么在这n条指令执行过程中是不能被打断的,如果被打断就有可能造成程序上的错误,这时我们就可以用之前学习的互斥
2022-02-10 11:40:56
253
原创 SylixOS移植常见问题——编译过多文件导致报错
问题复现:由于RealEvo IDE在Windows下使用的sh.exe支持的命令长度有限(命令要小于16K),如果需要编译的源文件过多,可能会报溢出错误或"make (e=87): 参数错误。"等,典型的表现型式有:我这里是创建了0.c、1.c~999.c,编译为一个动态库,来复现这个错误。系统自动生成的mk文件为:test_big_range_so.mk。解决方案:由于问题出现的原因显而易见,就是在编译过程中,执行到链接阶段时,由于需要链接的.c文件过多,导致链接的那一条命令长度
2022-02-10 11:28:46
757
原创 OpenCV 学习(一)
1,安装环境安装过程可以参考:【OpenCV入门教程之一】 安装OpenCV:OpenCV 3.0、OpenCV 2.4.8、OpenCV 2.4.9 +VS 开发环境配置_【浅墨的游戏编程Blog】毛星云(浅墨)的专栏-优快云博客_opencv本人安装的是opencv-4.5.4-vc14_vc15.exe版本;2,配置环境变量:本人安装的是 Visual Studio 2019;1)配置包含目录:将D:\Program Files\opencv\build\i.
2021-12-17 01:09:45
5440
转载 全志linux平台读写寄存器方法
cd sys/class/sunxi_dump把要读写的地址写到dump里root@TinaLinux:/sys/class/sunxi_dump# echo 0x07010310 > dump读出来看一下root@TinaLinux:/sys/class/sunxi_dump# cat dump0x00330000改一个数写进去root@TinaLinux:/sys/class/sunxi_dump# echo 0x07010310 0x00330001 > writ
2021-08-24 08:53:36
778
原创 SylixOS 下网络驱动编程(一)
目的:最近在搞DW 网卡驱动,索性自己重新编写驱动,这样加深下在SylixOS 系统下网络驱动的过程; 1, 开始先了解下SylixOS 下的网络驱动编程流程,建议看下《SylixOS 驱动程序开发》手册,SylixOS 下网络整体框图如下: 2,通过手册可以得知,如果想在SylixOS 下添加新的网络设备,需要使用到 netdev_add() 这个函数;/* netdev driver call the following function...
2021-07-26 15:29:03
577
1
原创 关于串行mdio
背景:最近在适配xxx 项目网卡,第一路很快就适配上,同样的型号mac 和phy 的第二路,花了3天时间,现在总结下经验。在适配第二路网卡时,因对方的硬件资料和软件资料保密,每次都他妈的提供少许资料,源码也提高只言片段;无语。。。。正题:调试时通过mdio 接口读取第二路phy id 无法读取到,但是通过第一路mac配置不同的phyaddr可以读取到两路phyid;通过查询相关资料,这是串行mdio 设计,只有一路mac 基址可以读取phy 状态,但是要将不同的phy 状态信息传给相对应的m
2021-02-02 20:32:19
305
原创 sylixos 串口驱动流程
在Sylixos 下串口被封装成一个字符设备;1,我们可以看到内核库源码ty目录下,是内核封装好的字符设备,在开发时我们只要完成相关具体的io操作及回调函数的填充即可:2,tty 设备的实现:基本流程,(1)安装驱动操作函数; (2)实现SIO_CHAN 结构体中的回调函数供tty 设备函数进行回调使用,创建 tty 设备,创建收发缓冲区;(3)需要我们实现SIO_DRV_FUNCS 中ioctl()、txStartup、callbackInstall 、pollInput、...
2020-12-30 08:32:55
1030
原创 自定义大小端转换函数
#define BIG_TO_LITTLE(x) (((x) & 0xFF) << 24) | \ (((x) & (0xFF << 8)) << 8) | \ (((x) & (0xFF << 16)) >> 8) | \ (((x) & (0xFF << 24)) >> 24
2020-10-09 11:05:44
345
原创 DSP6678 RapidIO基本原理之二——RapidIO协议结构及包格式
一、RapidIO协议结构及包格式 为了满足灵活性和可扩展性的要求,RapidIO协议分为三层:逻辑层、传输层和物理层。下图说明了RapidIO协议的分层结构。逻辑层定义了操作协议; 传输层定义了包交换、路由和寻址机制;物理层定义了电气特性、链路控制和纠错重传等。 像以太网一样,RapidIO也是基于包交换的互连技术。RapidIO包由包头、可选的载荷数据和16bits CRC校验组成。包头的长度因为包类型不同可能是十几到二十几个字节。每包的载荷数据长...
2020-09-28 21:22:14
3033
原创 DSP6678 RapidIO基本原理之一
一、 RapidIO简介 RapidIO是一种非私有的、高带宽的、系统级的互联方式。它是一个包交换的互联,主要作为片间和板件的互联接口。 可用于微处理器、内存、内存映射的IO设备间的连接。RapidIO的基本特征如下: a、灵活的系统架构,支持点对点通信; b、带有错误检测的健壮的通信机制; c、频率及端口宽度的可扩展性; d、非软件密集型的操作(门铃机制,避免了轮询查看数据) ...
2020-09-28 21:19:25
2358
原创 CLK_OF_DECLARE 解析
Linux下系统时钟在初始化时经常用到CLK_OF_DECLARE 这个宏,现在以 6ul为列做分析:CLK_OF_DECLARE(imx6ul, "fsl,imx6ul-ccm", imx6ul_clocks_init);CLK_OF_DECLARE 的定义:#define CLK_OF_DECLARE(name, compat, fn) OF_DECLARE_1(clk, name, compat, fn)OF_DECLARE_1 的定义:typedef void (*of.
2020-06-24 13:47:54
1769
原创 imx6ul 时钟初始化流程
1,查看 dtsi 设备树找到 clock :clocks { #address-cells = <1>; #size-cells = <0>; ckil: clock@0 { compatible = "fixed-clock"; reg = <0>; #clock-cells = <0>; clock-frequency = <32768>; clock-output-names = "ckil"; };
2020-06-24 13:15:51
2117
原创 全志 T3 uboot 下网络的添加
board_init_rputs("Net: ");eth_initialize(gd->bd); // 网络初始化开始处
2020-06-04 20:28:59
1084
原创 sylixos 下 t3 多核启动流程
在主核启动后,通知其它核进行启动:for (ulCPUId = 1; ulCPUId < LW_NCPUS; ulCPUId++) { /* 启动其它 CPU */ API_CpuUp(ulCPUId);}bspCpuUpSync();/********************************************************************/LW_API ULONG API_CpuUp.
2020-06-04 20:28:33
522
原创 Linux 下打印网卡 phy 寄存器
啥也不说:贴代码#include <stdio.h>#include <stdlib.h>#include <string.h>#include <linux/mii.h>#include <sys/types.h>#include <sys/socket.h>#include <sys/ioctl.h>#include <net/if.h>#include <linux/sockio
2020-06-02 14:44:01
658
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人