SM501显卡驱动的移植(linux.2.6.18)

16、AI与无人机助力紧急器官移植及医疗物资运输 本文探讨了AI与无人机(UAV)集成模型在紧急器官移植和医疗物资运输中的应用。传统运输方式受限于交通、时间和环境因素,而基于图神经网络(GNN)的AI-UAV系统可实现高效、智能、全天候的医疗物资配送,具备实时温湿度监控、自动导航和适应复杂地形等优势。文章分析了该模型在血液、器官运输中的关键作用,展示了其在澳大利亚、中国、美国等国的实际应用案例,并通过表格与流程图说明运作机制。同时,文章还探讨了技术、法规和社会层面的挑战及应对策略,展望了未来技术融合、应用拓展和国际合作的发展趋势,凸显其在全球医疗物流中的广 阅读详情

本文从三个方面说明一下SM501显卡驱动在2440+2.6.18环境下的移植:
1 硬件情况。
2 移植过程
3 驱动测试

一、硬件情况:
第一次接触到显卡编程,有点不太适应。SM501的Datasheet写的太简略,个人觉得有用的基本上就是两个方面:
1 内存映射模式。
2440与SM501连接模式为2440作为HOST有独立的SDRAM,SM501除了可以访问HOSTSDRAM外,还拥有8MB的本地内存作为 FrameBuffer。SM501的帧缓存与IO寄存器占有64M地址空间。其中0~62M属于Framebuffer,高2M地址空间属于SM501 的IO寄存器端口地址。这2M IO端口空间中每64KB属于一组接口寄存器。 在我的板子上,SM501的64M地址空间映射在2440的0x800_0000~0x1000_1000范围内。即FrameBuffer的起始物理地 址为0x800_0000,SM501 MMIO_BASE地址0xBE0_0000。 这些对于移植驱动来说应该已经足够。
2 基本配置。由于两个原因:1是对于图形显示芯片的基本知识欠缺,2是SM501的Datasheet实在不怎么样,太简略。应该是具体的配置还不太清晰。 主要方面如下:
1)系统设置  :系统配置,DRAM配置时序等,GPIO功能配置。
2)2D加速操作。设置寄存器的值和命令,启动图形加速操作。
3)LCD接口设置
4)CRT接口设置
二、SM501驱动在2.6.18内核下的移植过程:
下载SM501驱动,版本0.05,按照其readme.txt的说法,支持2.6.4内核和2.4.20。
开发板环境s3c2440 + linux2.6.18。
1)按照驱动目录下的readme.txt,先将4个驱动源文件voyage.c(.h),smi2d.c(.h)拷贝到driver/vedio/下面。
2)在该目录下修改与编译相关的Kconfig和Makefile:
首先修改Kconfig文件,在menu "Graphics support" 菜单,config FB选项下边 添加选项
# added by beelike ,for sm501 support !!
config FB_SM501_KERNEL_2_6_X
bool "Silicon Motion, Inc. SM501 support"
depends on FB
choice
在Makefile中 添加 编译规则 :
obj-$(CONFIG_FB_SM501_KERNEL_2_6_X)  += voyager.o smi2d.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o
3)在make menuconfig 中,选中Frame buffer 支持,LOGO,SM501支持。
下面是源代码的修改。
使驱动默认支持支持1024*768*32 CRT显示。
4)在voyager.h中,相关修改
#define isPC 0      //非PC系统
#define isPCI 0 //非PCI总线
#define SCREEN_X_RES 1024  //水平分辨率
#define SCREEN_Y_RES 768 //480
#define SCREEN_BPP 32 // BPP
#define isACCELENT 0 /* 2440 非 Accelent 平台*/
#define FB_PHYSICAL_ADDR  0x08000000  //nGCS1
#define REG_PHYSICAL_ADDR 0x0BE00000  //0x08000000+62M的地址为MMIO_BASE
voyager.h修改结束。
5)接下来的移植过程与readme.txt中的大不相同。我想是因为2.6.4与2..6.18版本的不一样。Readme.txt中说到将 voyager.c中sm501fb_init函数添加到fbmem.c中的fb_drivers数组中去,然而,2.6.18的内核已经没有这个数组 了。添加到这个数组中无非就是为了使得在启动的时候sm501fb_init得到执行而已。我想到的办法是使用 module_init(sm501fb_init)。事实证明,这样做是正确的。
6)在sm501fb_init函数中添加外部晶振频率设定。驱动源码中默认使用24M,但是我的板子上使用的是12M。
在sm501fb_init中添加:
    //beelike add , here set extern cystal clock =12M .
crystal=regRead32(MISC_CTRL);
crystal=FIELD_SET(crystal,MISC_CTRL,CRYSTAL,12);
regWrite32(MISC_CTRL, crystal);
//end add
添加的位置必须在对SM501的64M缓存进行ioremap之后,否则会出现Oops。
如果显存不为8M,可以在sm501fb_init函数中设置。驱动默认设置的是8M。
7)设置CRT模式,修改smi_set_timing函数中的panelSetMode为crtSetMode。
static void smi_set_timing(struct smifb_info *sfb,struct par_info *hw)
{
//panelSetMode(hw->width, hw->height, 0, hw->hz, sfb->fb.var.bits_per_pixel);
crtSetMode(hw->width, hw->height, 0, hw->hz, sfb->fb.var.bits_per_pixel);
// Turn on CRT DAC. for simultanous display
regWrite32(MISC_CTRL, FIELD_SET(regRead32(MISC_CTRL),  MISC_CTRL,  DAC_POWER, NABLE));
}
8)其它改动:主要是添加了module_exit清理函数。
在voyager.c头文件包含下面定义全局指针:
//added by beelike  
struct smifb_info *gpinfo=NULL;//gpinfo驱动的全局变量
在sm501fb_init()中修改:
gpinfo=sfb = smi_alloc_fb_info(pdev, name);
在voyager.c末尾添加:
/*
*  beelike add
*/
void sm501fb_exit(void)
{
if(!gpinfo) return;
smi_unmap_smem(gpinfo);
smi_unmap_mmio(gpinfo);
unregister_framebuffer(&(gpinfo->fb));
smi_free_fb_info(gpinfo);
}
module_init(sm501fb_init);
module_exit(sm501fb_exit);
MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("SM501 Framebuffer driver .");
/**end add **/

9)其它被证明为没有必要的修改:
添加头文件:
#include
/*beelike add  这里添加对bank1的DRAM控制寄存器设置*/
#define S3C2410_BWSCON_DW1 (3
void sm501_hwinit(void)
{ volatile unsigned int * p;
p= S3C2410_BWSCON;
*p = (*p & (~(S3C2410_BWSCON_ST1| S3C2410_BWSCON_WS1|S3C2410_BWSCON_DW1)));
  *p = (*p)|(S3C2410_BWSCON_ST1| S3C2410_BWSCON_WS1 |S3C2410_BWSCON_DW1_32);
p=S3C2410_BANKCON1;
*p= S3C2410_BANKCON_Tacs0|S3C2410_BANKCON_Tcos4|S3C2410_BANKCON_Tacc14|S3C2410_BANKCON_Tcoh1 | S3C2410_BANKCON_Tcah4 | S3C2410_BANKCON_Tacp6 | S3C2410_BANKCON_PMCnorm;
}
/* 虽然被证明没有必要,那因为内核或者u-boot已经对这两个寄存器做过正确设置,如果移植失败,则的确应该考虑内存控制器的设置问题 end add */
整体来说,移植SM501驱动还是比较顺利的。系统启动后在屏幕左上角安静显示了小企鹅。

三、驱动测试:(Framebuffer 编程)
所有的fb驱动拥有同一个FB_MAJOR(29)。SM501显卡驱动在我的板上占用的minor=0。先生成节点:
mknod /dev/fb0 c 29 0
然后使用程序fbtest.c测试,源码如下:(此源码来自网络,略加修改)
#include
#include
#include
#include
#include
int main()
{
        int fbfd = 0;
        struct fb_var_screeninfo vinfo;
        struct fb_fix_screeninfo finfo;
        long int screensize = 0;
        int * fbp = 0;
        int i;
        
        fbfd = open("/dev/fb0", O_RDWR);
        if (!fbfd) {
                printf("Error: cannot open framebuffer device./n");
                exit(1);
        }
        if (ioctl(fbfd, FBIOGET_FSCREENINFO, &finfo)) {
                printf("Error reading fixed information./n");
                exit(2);
        }
        if (ioctl(fbfd, FBIOGET_VSCREENINFO, &vinfo)) {
                printf("Error reading variable information./n");
                exit(3);
        }
        screensize = vinfo.xres * vinfo.yres * vinfo.bits_per_pixel / 8;
        fbp = (int *)mmap(0, screensize, PROT_READ | PROT_WRITE, MAP_SHARED,fbfd, 0);
        if ((int)fbp == -1) {
                printf("Error: failed to map framebuffer device to memory./n");
                exit(4);
        }
        printf("/dev/fb0:/n xres=%d,yres=%d,bpp=%d/n",vinfo.xres,vinfo.yres,vinfo.bits_per_pixel);
        for(i=0;i
在移植过程中主要参考readme.txt和网络上两篇好文章:
http://www.eetop.cn/blog/html/38/12938-11581.html
http://blog.youkuaiyun.com/listream1/archive/2006/11/06/1369361.aspx
这两篇文章是基于2.4版内核的。


本文来自ChinaUnix博客,如果查看原文请点: http://blog.chinaunix.net/u3/93290/showart_1960374.html

别再瞎改网络结构了!解决YOLO小目标检测痛点,我用这招把mAP提了15% 本文基于我7年工业PCB缺陷检测、无人机航拍、安防监控项目的一线落地经验,针对YOLO小目标检测最痛的「漏检率高、特征丢失、精度难提升」三大核心问题,拆解出。本文全程配套小目标特征丢失原理图、分块训练流程图、切图前后效果对比图、mAP提升柱状图、多方案性能对比表等可视化内容,从YOLO天生不擅长小目标的底层根源、方案核心原理、可直接复制的代码实现,到工业场景实测验证、新手必踩的10个坑位避坑指南,全链路讲透。 阅读详情

相关推荐

ros2 gazebo仿真阿克曼小车搭载livox mid360雷达流程

流程简介:仿真环境的搭建需要安装ROS2和Gazebo。使用的是Humble版本,需要确认是否已经正确安装。然后是阿克曼小车模型的URDF,需要包括底盘、转向机构、驱动轮等,需要参考现有的阿克曼模型,比如ClearPath的Husky,但需要调整参数。Livox Mid360雷达在Gazebo中的仿真可能没有现成的插件,需要使用通用3D LiDAR插件来模拟。IMU的仿真相对简单,但需要注意噪声模型,以接近真实数据。

weixin_43802726的博客 3209

嵌入式2D加速显卡SM501驱动的移植[linux.2.6.18]

嵌入式2D加速显卡SM501驱动的移植[linux.2.6.18]本文从三个方面说明一下SM501显卡驱动在2440+2.6.18环境下的移植:1 硬件情况。2 移植过程3 驱动测试一、硬件情况:第一次接触到显卡编程,有点不太适应。SM501的Datasheet写的太简略,个人觉得有用的基本上就是两个方面:1 内存映射模式。2440与SM501连接模式为2440作为HOST

阶廷成长日记 2334

FoundationPose复现及Realsense应用

FoundationPose是一个统一的基础模型,用于6D对象姿态估计和跟踪,支持基于模型和无模型的设置。在测试时可以立即应用于未见过的新对象,无需微调,只要给出其CAD模型,或者捕获少量RGBD参考图像。得益于统一框架,下游姿态估计模块在两种3D模型设置中都是相同的,当没有CAD模型时,使用神经隐式表示进行高效的新视角合成。通过大规模合成训练,辅以大型语言模型(LLM)、一种基于transformer的新架构和对比学习公式,实现了强大的泛化能力。

m0_56661101的博客 1万+

训练数据示例

针对“规格书生成测试用例脚本”的任务,在 LLaMA-Factory 中使用即可。关键是把“规格书内容”放进input字段,把“期望的脚本输出”放进output字段。

liuxs2009的专栏 57

SuperMap iObjects Java组件开发——环境部署(IntelliJ IDEA)

SuperMap iObjects Java 是面向GIS应用系统开发者的组件式GIS开发平台,具有强大的地理数据管理、编辑、显示、分析等功能,并且其具有极强的易用性和丰富的帮助资源,适宜快速开发大型GIS应用系统。本文将介绍如何在IntelliJ IDEA集成开发环境中进行SuperMap iObjects Java组件的环境部署。

nan620403的博客 1081

Windows11 下 Detectron2 的安装与配置全攻略

本文提供了在Windows11系统下安装和配置Detectron2的完整教程。详细介绍了从环境准备、创建虚拟环境、安装PyTorch与CUDA,到修改源码、编译安装以及运行验证Demo的全过程,帮助开发者克服Windows平台上的常见问题,成功部署这一强大的计算机视觉库。

weixin_29081703的博客 245

从瀑布到流水线:DevOps 入门与 GitLab + Jenkins + Docker 落地实践

先看清软件开发生命周期(SDLC)的全貌,再对比瀑布模型与敏捷开发,随后进入持续集成与 CI/CD 的机制内核;最后落到实操——在 GitLab、Jenkins、Docker 组成的四机实验环境里,走完源码托管、自动化构建、镜像封装与远程部署,直到参数化构建与版本回滚。概念与命令并重,既是入门地图,也是操作手册。

年轻的时候很穷,经过我多年的努力,终于不再年轻。 238

别只当玩具!聊聊这个555金属探测器电路背后的电磁感应与RLC调谐原理

本文深入解析了555金属探测器电路的工作原理,重点探讨了电磁感应与RLC调谐原理。通过分析电感线圈的电磁特性、RLC谐振电路的行为以及555定时器的多重功能,揭示了这一看似简单的装置如何实现金属检测。文章还提供了灵敏度优化方案和常见问题解决方法,帮助读者从科学角度理解这一实用技术。

weixin_29204205的博客 477

Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)

Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)

要努力去发光,而不是被照亮~ 115

数字逻辑设计大程——以撒的结合(Verilog语言)

前言 在大二学习数字逻辑设计课程(即计算机组成课程的前引课)时,期末大程题目我和同组的github成员lwaekfjlk 决定写一款基于Verilog语言的游戏。原型是我们两人都非常喜爱的一款游戏——The Binding of Isaac: Rebirth。在三天三夜的奋战后,基本完成了预期目标。由于亲自编写了其中种种,我们深知新手初期使用Verilog语言有多困难。而可悲的是,这又是之后计算机组成课程和体系结构课程所需的!因此,我们将top部分源码放在这里,供同袍们参考。若想引用还请注明出处。 代码部分

LuvLucifer的博客 1383

YOLOv8+BiFPN双向特征金字塔:多尺度目标检测精度提升28%的实战教程

双向特征金字塔网络(BiFPN)是一种强化多尺度特征融合支持“自顶向下+自底向上”的双向特征流动,同时保留不同尺度的细节信息;引入加权融合机制,自动学习不同特征的重要性权重;裁剪冗余节点,在轻量化的同时提升融合效率。

m0_64661770的博客 492

DNS 不是把域名翻译成 IP:递归解析、TTL 缓存、CNAME 与报文排错实战

本文通过离线Python实验,拆解DNS递归解析、缓存机制与报文结构,揭示“DNS不是全局映射表”的本质。重点解析递归器角色、TTL衰减、CNAME链处理、负缓存隔离及修改记录延迟生效等核心问题,结合实战排错案例,阐明缓存层级、事务匹配、截断处理与安全边界,强调从应用到权威的逐层排查逻辑,实现可复现、可验证的DNS教学系统。

此人很懒,什么都没有写~~ 346

ROS机器人未知环境自主探索功能包explore_lite最全源码详细解析(一)

本系列文章主要针对ROS机器人常使用的未知环境自主探索功能包explore_lite展开全源码的详细解析,并进行概括总结。 本系列文章共包含六篇文章,前五篇文章主要介绍explore_lite功能包中 explore.cpp、costmap_tools.h、frontier_search.cpp、costmap_client.cpp等源码实现文件中全部函数的详细介绍,第六篇文章进行概括总结,包含自主探索功能包explore_lite的简介,实现未知环境自主探索功能的原理及流程总结,效果演示,使用功能包

慕羽★的博客 3936

密码存储不是 MD5 加盐:PBKDF2、scrypt、参数升级与安全验证实战

本文通过实战演示密码存储的正确做法:摒弃MD5加盐,采用PBKDF2与scrypt等高成本密钥派生函数,结合随机盐、版本化记录与严格解析,确保离线破解成本可控。模块实现安全验证、参数校验、透明升级与统一错误处理,强调算法选择需兼顾安全性与可维护性,提供教学级密码存储方案,助力构建可迁移、可审计的认证边界。

此人很懒,什么都没有写~~ 220

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

【LTE L3 笔记 09】LTE物理信道-PRACH

课程来源:B站《【2022】华为HCIA-LTE无线工程师认证学习中级视频》笔记为个人整理,含课件截图,仅供学习交流。

lyouhuan的博客 187

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

软件测试用例模板怎么写:从用例设计到执行记录的全套指南

测试用例是测试工作的核心产出,它决定测试覆盖了多少、漏掉了什么。但大多数人的测试用例写得像流水账——只有正常路径,没有异常场景;只有操作步骤,没有预期结果;只有功能测试,没有非功能测试。本文拆解测试用例的标准结构,说明每个字段的含义和写法,给出覆盖功能测试、性能测试、安全测试的完整用例范例,并列出测试用例设计的五个高频遗漏点。

wuwangzhiduoshao的博客 148

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

MCP实战06:传输实战、测试与部署

你的 MCP Server 写完了,怎么确认它真的能被宿主正确调用?这课给传输层实战三件套:MCP Inspector 可视化调试、协议级自动化测试(pytest 断言 JSON-RPC 报文结构)、stdio/HTTP 双传输部署。测试不是可选项——工具描述错一个字段宿主就调不对,你能给 Server 建起自己的回归测试。

Blockbuster-drug 718

【鸿蒙专题与实战】测试体系:单元测试、组件测试与 UI 测试

本文系统讲解鸿蒙开发中的三层测试实践:底层单元测试(用Hypium框架,优先覆盖纯函数、边界与异常)、中层ViewModel逻辑、顶层仅测3-5条关键UI路径。强调测试应“越往下写得越多”,因单元测试快且成本低,而UI测试慢易出错。通过实例说明断言拆分提升定位效率,结合覆盖率报告(hvigorwtest --coverage)发现盲区,核心是“用覆盖率找漏测,而非追求数字”。附五步落地清单:建测试文件、按优先级补用例、精简UI测试、生成报告、定位未覆盖行。下一篇将开启实战项目:从需求到上架全流程。

信息安全领域优质创作者|操作系统领域专家 164

【LTE L3 笔记 05】LTE同步信号

课程来源:B站《【2022】华为HCIA-LTE无线工程师认证学习中级视频》笔记为个人整理,含课件截图,仅供学习交流。

lyouhuan的博客 114

电芯串并联与BMS保护

串联升压、并联扩容,规则一句话,但整包能用多少由最弱的那节电芯说了算。这篇先算最弱电芯的账,再讲清三层保护,最后给对应的BMS测试用例:欠压、压差、均衡怎么测。BMS项目里有个常见场面:两台同配置的样车,电芯是同一批的,跑出来续航和限功率点却对不上。拆包量单体,一台里有一节电芯的容量比其他低了8%。整包表现被一节拖住,就是串并联的规矩在起作用。这篇先把规则和算例讲清,再讲保护分层,最后落到测试用例。

qq_43241255的博客 228

Go1.27升后Config.Rand怎么改测

Go1.27起tls.Config.Rand弃用;确定性测试改用testing/cryptotest.SetGlobalRandom,附仓库扫描与go test冒烟。

Amax3747的博客 397

《C++ 项目:手写大模型接入 SDK》ChatGPT接口设计(中):全量响应实现和测试

本文详细实现了ChatGPTProvider对接OpenAI ResponsesAPI的全量响应sendMessage接口,涵盖模型可用性校验、请求参数解析、JSON报文组装、HTTP客户端配置(含代理与超时)、网络请求发送及响应解析全流程。通过GTest编写测试用例,发现并修复了因Content-Type重复设置导致的400错误,揭示了不同厂商网关对请求头规范的宽容度差异,最终提出一套兼容多模型服务商的标准写法,提升了代码通用性与鲁棒性。

2501_91275995的博客 565

AI提效测试实践论

11、测试结束后,必须将任务过程中所有走了弯路,多次尝试的才成功操作的最终解决办法,按1、2、3...列点追加写入到当前文件的“特别注意要点”下(必须只记一行摘要,完整内容另存 [当前AGENTS.md文件所在的目录]\details\[序号].md)(如果新纪录的要点和历史要点存在冲突,必须直接对历史要点进行修正。`测试用例` 章节下必须按用例分层组织为 `冒烟集`、`主流程集`、`边界集`、`回归集` 四个子集,并在 `用例结果汇总` 中统计各分层集的用例数量。3、是否存在BUG;没有则写“无”> |

weixin_44711513的博客 120

工作流 vs 自主 Agent:5 种设计模式与 3 种建模方式详解

本文基于 Anthropic《Building Effective Agents》指南,系统梳理了AI应用中的两类核心架构:Workflow(编排式)与Agent(自主智能体)。强调“能画流程图就不上Agent”,提出从简单提示链到复杂自主决策的5种可组合工作流模式,并给出选型口诀与工程实践建议。核心观点:优先用确定性、可审计的Workflow,仅在任务路径未知时启用Agent,避免盲目复杂化。

分享大数据、java相关的技术 154

AI重构工业软件|泛联新安亮相第四届工业软件创新发展学术会议

两天会议,从院士报告里的战略判断,到灯塔工厂的实战复盘,再到泛联新安总部的体系拆解,其实都在回答同一个问题:AI重构工业软件,怎么从“演示可用”走到“生产敢用”。没有合理的裁判体系为AI任务结果进行验收,人类工程师的精力最终会疲于为AI产出做确认和兜底。工业软件和关键装备行业的AI转型,缺的从来不是模型,而是让模型可以被信任的那套工程体系。这也是唐勇博士在主论坛报告里反复强调的结论。这个问题没有一次性答案,我们会持续把可信智能体的工程实践公开出来。

flxa19310090839的博客 43

Python 100讲课程导航:第08篇《Python input 与类型转换:构建可靠的交互程序》

本文详解Python中input()的返回类型为字符串,强调必须通过int()、float()等函数进行类型转换。重点讲解了输入验证的重要性,结合try-except处理ValueError等异常,实现可靠的交互程序。通过购物预算计算器实战,演示如何防范非法输入、处理边界值,并推荐使用Decimal避免浮点精度问题,提升程序健壮性。

铭渊老黄 133
上一篇: 高手博客
下一篇: S3C2440 LCD驱动(FrameBuffer)实例开发讲解
control_tech
博客等级 码龄17年 53粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值