
嵌入式开发常识
文章平均质量分 57
cpuwolf
Wrote a complete Unix-like operating system which included preemptive multitasking, a non-trivial filesystem, interrupt-driven I/O, and signals
. 从事ARM嵌入式开发多年,bootload,kernel,driver都有较深的理解。
展开
-
VScode正则表达式
子字符串替换方法,记着需要$1原创 2022-03-28 09:36:03 · 1810 阅读 · 0 评论 -
EC和ACPI
对我来说ACPI就是Lua,一种粘合剂,用一种贴近于平台无关二进制编码,来干平台相关的事情。其中Lua解释器,相当于就是ACPICA开源库中OSPM调用的部分。ACPI的文档,确实是放在UEFI官网的下面Specifications | Unified Extensible Firmware Interface Forum对于EC,那么ACPI也必须把他抽象出来成一个设备我在ACPI的文档中找到对EC的抽象描述,举了个例子如下最吸引我的是_CRS对设备资源的描述这段,定义了两个.原创 2022-03-01 20:00:00 · 3571 阅读 · 0 评论 -
Intel平台主脉络总结
这段时间一直在研究Intel平台,历史悠久,所以涉及的知识实在太多,如果随机学习,就如大海捞针。对于这种巨大的平台,要先去摸索到脊梁骨是最重要的,之后才能事半功倍。上图我对前几天的图做了更多细化总结,在前几天的图基础上加了些细节,主要是看文档的结果,让我更加确定了这幅图的准确性。...原创 2022-02-28 22:00:00 · 541 阅读 · 1 评论 -
进了OS,如何重刷BIOS?
我其实不太懂Intel平台_cpuwolf的成长笔记-优快云博客https://blog.youkuaiyun.com/cpuwolf/article/details/123133731?spm=1001.2014.3001.5501根据前一篇文章的分析,既然PCH有SPI控制器,那么CPU进了OS,理论上可以刷SPI flash。这也是为什么当年会有BIOS病毒的原因,促成了后期双BIOS设计在主板设计中出现。果然找到Linux内核文档已经,有文章Upgrading BIOS using inte.原创 2022-02-28 21:30:00 · 714 阅读 · 0 评论 -
自备一个刷BIOS神器
我其实不太懂Intel平台_cpuwolf的成长笔记-优快云博客【原创】大三学生写了个操作系统:19年前_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1YS4y1r77n#reply103602594912大概1998年,妈妈花了重金给买的奔腾II 266MHz,这个视频我也说了。20xx年,我自己组装的i7 7700k玩模拟飞行用。其实我一共就拥有过这两台像样的Intel平台电脑。其实我一直感觉我不懂Intel平台,但是基于IA-32的操作系统,我也写出来原创 2022-02-27 08:11:45 · 1389 阅读 · 0 评论 -
Intel ME到底在哪颗芯片里
前一篇文章画了个图今天我突然想到一个关键字Intel ME,这个东西在那里,不会这图我画错了吧?最终在德国网站上找到了一幅图https://www.heise.de/ct/hotline/FAQ-Intel-Management-Engine-3978291.html还好,ME居然运行在PCH里面,而且还是独立MCU,有自己的固件,居然还用minix OS,minix最厉害的就是崩溃以后的自恢复能力,这也就能理解了。总之我的图还是没画错。...原创 2022-02-27 07:14:25 · 2455 阅读 · 1 评论 -
Intel平台不可忽略的接口eSPI
eeSPI就是SPI升级版?根据这名字就感觉eSPI就是SPI的升级版,这样说没错。但是如果你思想上认为只是提高了点速度之类,那你就小看了。从双向通讯信号上讲,LPC/SPI/eSPI,大同小异、参考书公开的Intel pdf文档Enhanced Serial Peripherial Interface Base Sepcification当我们谈eSPI,其实主要是为了把LPC接口比下去的eSPI vs. LPC side band信号数量减少EC/Super I/O芯片和PCH的连接如原创 2022-02-25 16:46:50 · 4774 阅读 · 0 评论 -
我其实不太懂Intel平台
【原创】大三学生写了个操作系统:19年前_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1YS4y1r77n#reply103602594912大概1998年,妈妈花了重金给买的奔腾II 266MHz,这个视频我也说了。 20xx年,我自己组装的i7 7700k玩模拟飞行用。其实我一共就拥有过这两台像样的Intel平台电脑。其实我一直感觉我不懂Intel平台,但是基于IA-32的操作系统,我也写出来了,其实自己知道,里面很多的代码都是建立在Intel的老原创 2022-02-25 16:09:28 · 817 阅读 · 0 评论 -
Xcode编译器很牛的代码分析功能
主要是我要设计一套代码同时跑在三个平台上,Windows,Linux,macOS。为奎克质造的设备写个对接X-Plane的插件。这种设计多出了很多事情,同一套代码,我需要到三个OS去编译,事情多了很多。但是也带给我很多新的视野,更重要的是好处,我可以在多个OS之间交叉检查我的代码的Robust。最近在用Xcode编译代码时,发现一个不起眼的编译选项Analyze,这是以分析为目的的编译,具体背后在干什么我不知道,也不关心,这种编译方式会比普通编译时间更长点。编译完之后,左侧错误列表会列举出一原创 2022-01-01 21:47:49 · 867 阅读 · 0 评论 -
海盗船水冷风扇H80iUbuntu Linux下的降噪
sudo snap install opencorsairlinksudo snap connect opencorsairlink:raw-usbsudo snap connect opencorsairlink:hardware-observesudo opencorsairlink --device 0 --fan channel=0,mode=3Dev=0, CorsairLink Device Found: H80i GT V2!Vendor: CorsairProduct.原创 2020-07-11 05:41:53 · 688 阅读 · 0 评论 -
Ubuntu 18.04 BuildYourOwnKernel
GET SOURCEsudo apt-get install linux-sourcecd /usr/srctar xf linux-source-4.15.0.tar.bz2 -C ~/Public/cd ~/Public/linux-source-4.15.0/COMPILEcp /boot/config-4.15.0-109-generic .configLANG=C fakeroot debian/rules cleanfakeroot make-kpkg --ini原创 2020-07-11 04:22:44 · 407 阅读 · 0 评论 -
Linux内核USB HID游戏摇杆20年来都存在按键数量限制
本来是奎克质造生产的模拟飞行设备QMCP737Chttps://x-plane.vip/quickmade/qmcp737c/我在写软件,支持全平台win/lin/mac,和模拟飞行平台X-Plane 11保持一致。结果WIN/MAC对设备支持没问题,插上就可以用。但是Linux,插上也可以用,但是只剩80个按键,明明我的设备是104个按键,结果只识别出80个按键。然后用各种关键字max USB HID button number之类一顿GOOGLE搜索,无果。我记得Linus说过,原创 2020-07-10 22:09:39 · 1560 阅读 · 1 评论 -
编程不能太局限,我们可以做的事情很多
本人除了是IT从业者,更重要的是我也是大家俗称的“飞友”,围绕着“模拟飞行”这四个字也已经三年了。一开始听说拉登幢大楼的飞行员都是通过Microsoft Flight Simulator训练的,我就对这个FSX产生了浓厚的兴趣,这软件如此厉害?!其实FSX我大学里也有过一面之缘,这是面对着复杂的仪表,完全不知所措,在大学时就放弃了。谁知时隔10年,我又无意中撞上了这个软件,一往就是3年了。泡泡原创 2015-05-26 18:00:56 · 1573 阅读 · 0 评论 -
64位原子操作add
64位原子操作的加法的实现。只有看汇编才能理解1100306:80b5ef20 :1100307-80b5ef20: 53 push %ebx1100308-80b5ef21: 89 d8 mov %ebx,%eax1100309-80b5ef23: 89 ca原创 2015-02-12 19:04:13 · 2730 阅读 · 0 评论 -
IA32 MMU paging初始化代码
写了一段IA32 paging通用构造代码,有需要的,可以拿去原创 2014-10-27 17:22:15 · 1573 阅读 · 1 评论 -
Windows枚举出系统中所有的串口的9种方法
CreateFile("COM" + 1->255) as suggested by Wael Dalloul✔ Found com0com ports, took 234ms.QueryDosDevice()✔ Found com0com ports, took 0ms.GetDefaultCommConfig("COM" + 1->255)✔ Found com0c翻译 2013-12-27 18:55:36 · 5525 阅读 · 0 评论 -
Ubuntu bootloader Grub2的最简单配置方法
安装Grub Customizersudo add-apt-repository ppa:danielrichter2007/grub-customizersudo apt-get updatesudo apt-get install grub-customizer剩下的就是图形界面了原创 2013-12-27 22:42:38 · 3402 阅读 · 0 评论 -
二元一次方程在呼吸灯上的应用
我一直想用一个简单的表达式把呼吸灯效果表达出来。搜索了一下,大家都是千篇一律。我看稍微有点想法的也是说用sin(x)函数实现,还有人说有matlab。我只是想说,对于一个2MHz的单片机,你们的要求太高了。我只是追求用最简单,而且运算量不大的C代码实现。抛物线函数足够了,开口向下的,还要过原点(0,0),因为起始灯是熄灭的。二元一次方程最适合。参数a,b,c的c=0,因为过了原点。原创 2013-10-31 12:49:33 · 5836 阅读 · 3 评论 -
ARM指令预取的应用---调整DRAM的clock经典代码段
引言对DRAM clock的调整可能会影响对DRAM的读写,所以安全的方法是将指令预读。代码如下; First get cache info。CP15 c0中记录着该处理器的cache信息mrc p15, 0, r0, c0, c0, 1; Get I cache line size as (1 ,;32位的低两位表示cache line size,但是要经过前原创 2006-03-09 15:05:00 · 4230 阅读 · 0 评论 -
SAMSUNG Nand Flash应用
K9K8G08U1M 512Mx8Bits Package Type: 48-Pin TSOP1这是典型的NAND flash,由block组成,每一个block包含64个Pages,而一个page是2k+64=2048+64=2112字节。对于一个page,0~2047个字节用来存储数据,2048~2111,共64个字节,Spare Area,用原创 2006-07-26 09:48:00 · 2320 阅读 · 0 评论 -
C语言中实现跳转到任意行代码执行
C语言的用法非常灵活,其花哨的代码,真是耐人寻味。我在编程中用到了这样一些(如下),现在和大家分享一下。/*define*/void (*run) (void);UINT32 address;/*go! go! go!*/run = ( void(*)() ) address; (*run)();上面的代码用在我将程序通过USB download到内存中,然后让该程序得到执原创 2006-08-28 15:48:00 · 9101 阅读 · 1 评论 -
“代码执行环境”浅谈
“代码执行环境”不知道有没有这个专有名词。工作的经历让我感到这个概念需要摊出来好好说说。它是衡量你coding水平的重要指标。从计算机发明到现在,人们一直在努力使更多的人“不理解”这个概念,于是软件中的层级概念就随之产生了。内核,驱动,应用程序等的3个等级的大致的划分,也基本划分出了3种类型的程序员。操作系统的著作者更是竭力在营造一个好的“环境”给我们的代码。我们---“普通的程序员”则越来越傻。原创 2008-02-04 00:05:00 · 2054 阅读 · 0 评论 -
stmfd sp!, {r0-r3, lr}
stmfd sp!, {r0-r3, lr}指令执行前后堆栈的变化如下图原创 2008-04-17 15:30:00 · 11355 阅读 · 5 评论 -
显示驱动开发
最近学习显示驱动程序,遇到几个专业词汇,SYNC,ACTIVE,BACK porch, FRONT porch。显示器controller在画每条线的时候,从时序图,可以看出,active region后紧接着blanking region,blanking region中传输的是黑色像素点。也就是说blanking region=Front porch + Sync pulse + Back原创 2008-05-27 00:25:00 · 2636 阅读 · 0 评论 -
New Virtual Key to Unlock the Keypad in Windows Mobile 6 AKU 1.3
Third-party applications and OEM drivers can now post the VK_KEYUNLOCK message to unlock the keypad in both Windows Mobile 6 Standard and Windows Mobile 6 Professional. The following table shows t翻译 2008-09-16 12:18:00 · 1237 阅读 · 0 评论 -
ARM VFP
ARM的vector float-point遵循IEEE754-1985的标准。单精度浮点数用32位表示 双精度浮点数用2个32位数表示 <!-- google_ad_client = "pub-3409735151169599";/* blogspot head ad */google_ad_slot = "8483880340";goog原创 2009-11-06 14:15:00 · 5067 阅读 · 1 评论 -
C51控制FM Radio---NXP TEA5766
===============================程序开始是参考OURAVR网友的例子成功收到台,由于程序生成的hex文件太大,2051装不下,只是放在博客发表,一直没有时间整理出来。后来深圳市广视美电子有限公司的老姜发了一份SP3767的参考代码给我,通过学习SP3767的代码,发现许多好的思路和方法,结合我自己开始写的的程序,修修改改改成了现在的程序。===转载 2009-12-18 23:51:00 · 1899 阅读 · 0 评论 -
Add TEA5764 Linux radio driver
From: "Fabio Belavenuto" To: video4linux-list@redhat.comSubject: [PATCH] Add TEA5764 radio driverDate: Wed, 17 Dec 2008 20:49:33 -0200Add support转载 2009-12-19 00:00:00 · 2368 阅读 · 0 评论 -
I2C timing pattern
<br />用google搜索了I2C,想找个真实的I2C的时序图,怎么也找不到。今天自己贡献一个一副图,自己抓得真实的,包括了I2C spec所有的协议信号的样子。包括start, restart,stop,ack,nak,write,read<br />原创 2011-01-29 00:29:00 · 5781 阅读 · 1 评论 -
4-bit ECC in software is unacceptable
Clearly 4-bit ECC in software is unacceptable.转载 2011-03-09 11:06:00 · 2438 阅读 · 0 评论 -
ARM切换到THUMB模式
ARM切换到THUMB模式,根据ARM的文档说是用一个跳转完成,并且跳转地址要存储在general register里,地址中最地位为0。我一向喜欢眼见为实。最简单就是看看编译后变成什么样子,下面是一个叫ab的函数,开thumb编译的,结果就变成了下面这样:E28FC001 $Ven$AT$I$$ab: add r12,pc,#0x1E12FFF1C bx r12B510 ab: push {r4,r14}原创 2011-04-22 13:20:00 · 2991 阅读 · 0 评论 -
USB 2.0 suspend resume
suspend/resume时代USB2.0在定义最初就支持suspend/resume看一看见,退出suspend的时间要求是大于20ms。同时也可以看出D+, D-信号反转一下,既是触发resume流程,随即USB HOST需要拉出一个START信号,USB的通讯就彻底恢复了。LPM时代随后USB org认为这个简单的suspend/resume不能优化USB的功耗原创 2013-10-25 20:06:46 · 10975 阅读 · 0 评论 -
取出真正编译到的代码
经常一个大型的软件工程,里面包含甚至上GB的文件,然后根据不同的编译选项,实际只会编译到其中的一部分文件。你如何知道那些文件真正的在build过程中别用到了。我之所以改用build这个字眼,没有使用编译,这个词,是因为build过程,不只会包括编译,也时候是脚本处理,也时候是执行一些工具处理一些文件。这整个过程叫build最典型的例子,一个Linux内核,支持各种体系结构,你如果知道哪些文件你原创 2013-10-25 13:28:13 · 1857 阅读 · 0 评论 -
ARM branch instruction的分析
branch instruction的指令如下:0xEA00088E对应的二进制是:11101010000000000000100010001110分析如下:1110是无条件的意思101是branch instruction的标志000000000000100010001110一共24位,就是我们的0x88E,可以表示的最大数是2的24次方,即64MB,所以branc原创 2006-03-09 11:38:00 · 3598 阅读 · 0 评论