历史上的今天
返回首页

历史上的今天

今天是:2025年10月18日(星期六)

正在发生

2022年10月18日 | linux2.6.32.2 mini2440平台移植-- 串口驱动移植、I2C-EEPROM 驱动移植、看门狗驱动移植

2022-10-18 来源:csdn

1.7.1  把 UART2 改为普通串口驱动


S3C2440 芯片具有 3 个串口:UART0,1,2,我们下载的 Linux-2.6.32.2 已经具备完善的 UART0,1 的驱动,但对UART2 却用作了红外通讯(Irda),因此我们需要把 UART2 驱动稍微调整一下,以便作为普通串口来用。


先看看 S3C2440 串口部分寄存器的说明,如下图

接下来我们修改内核中关于 UART2 的配置,打开 mach-mini2440.c 文件,找到,如下红色代码为修改后的:


static struct s3c2410_uartcfg mini2440_uartcfgs[] __initdata = {


[0] = {


.hwport = 0,


.flags = 0,


.ucon = 0x3c5,


.ulcon = 0x03,


.ufcon = 0x51,


},


[1] = {


.hwport = 1,


.flags = 0,


.ucon = 0x3c5,


.ulcon = 0x03,


.ufcon = 0x51,


},


/*  把 UART2 改为普通串口  */


[2] = {


.hwport = 2,


.flags = 0,


.ucon = 0x3c5,


.ulcon = 0x03,


.ufcon = 0x51,


};


}


再修改串口所使用的端口初始化,打开  linux-2.6.32.2/drivers/serial/samsung.c,在大概 432 行左右,添加如下红色部分代码:


//需要添加的头文件


#include


#include


ourport->tx_claimed = 1;


dbg("s3c24xx_serial_startup okn");


/* the port reset code should have done the correct


* register setup for the port controls */


//串口 2 对应的端口初始化


if (port->line == 2) {


s3c2410_gpio_cfgpin(S3C2410_GPH(6), S3C2410_GPH6_TXD2);


s3c2410_gpio_pullup(S3C2410_GPH(6), 1);


s3c2410_gpio_cfgpin(S3C2410_GPH(7), S3C2410_GPH7_RXD2);


s3c2410_gpio_pullup(S3C2410_GPH(7), 1);


}


return ret;


这样,我们就完成了 UART2 的修整。


1.7.2  测试串口


回到内核源代码目录,执行:make  zImage,把重新生成的内核烧写到开发板中,依然使用友善之臂提供的  root_qtopia  文件系统,因为里面包含了一个图形界面的串口助手测试程序,极其方便测试。需要注意的是,mini2440 开发板并没有把 UART2 做成 RS232 端口引出,而是直接把它通过 CON3 排针引出了,因此需要一条 RS232 转接板(该转接板由友善之臂提供),把它连接到 mini2440 开发板的 CON3 接口,并把引出的串口通过直连线连接到另一台电脑的串口上,连接好开发板的电源,并设置 S2 为 nand 启动,打开电源,进入 Qtopia 系统,在"友善之臂"程序组中点"串口助手"图标,打开相应的程序界面,从该程序窗口的标题可以看到,默认设置为"ttySAC1 115200 8N1 [C]",它表示默认


端口的设置:


-  串口设备:/dev/ttySAC1,它对应 CPU 的第二个串口 UART1


-  波特率:115200


-  数据位:8


-  流控制:无


-  停止位:1


- [C]:表示字符模式,如果是[H]则表示 16 进制模式


上图中有两个"编辑框"区域,上面的"编辑框"是用于显示接收到的数据,它实际


上是不能编辑的;下面的"编辑框"可以通过 USB 键盘或者 Qtopia 的软键盘获取输入。因为我们要测试  UART2,因此点"Setting"按钮,在设置窗口中选中/dev/ttySAC2,


然后返回主界面,点 Connect 按钮,以打开开发板串口/dev/ttySAC2,在窗口下面的编辑框输入一些字符,点  Send  按钮,就可以向与它相连的串口设备发送数据了,下图显示的是通过Windows 超级终端接收的数据截图(注意:与此终端对应的串口也应该设置为 115200 8N1)。


1.8.1  在内核中配置 I2C 驱动


Linux-2.6.32.2 对 S2C2440 的 I2C 接口提供了完善的驱动,因此我们只需在内核中配置一下即可使用。


提示:其实 Linux-2.6.32.2 内核缺省的 mini2440_defconfig 就已经配置好了 I2C 驱动,


我们只不过在此打开看看具体的配置路径。在内核源代码目录执行:


make menuconfig,进入内核配置主菜单,依次选择进入如下子菜单:


Device Drivers    --->


<*> I2C support    --->


I2C Hardware Bus support    --->


我们看到这里已经选择好了"<*> S3C2410 I2C Driver",这里的 S3C2410 也可以适用于 S3C2440,因为它们的 I2C 端口及寄存器定义都是完全相同的。


以上配置所对应的驱动源代码为:linux-2.6.32.2/drivers/i2c/busses/i2c-s3c2410.c,


1.8.2  测试 I2C-EEPROM


测试程序名称:  i2c


测试程序源代码文件名Eeprom.c  24cXX.c


测试程序源代码位置解压 linuxexamples.tgz  可得


交叉编译器Arm-linux-gcc-4.3.2  with  EABI


开发板上对应的设备名/dev/i2c/0


对应的内核驱动源代码Linux-src/drivers/i2c/busses/i2c-s3c2440.c


其他:


Mini2440 为了方便用户测试,基于 I2C 总线挂接了一个 EEPROM 芯片,它是 AT24C08,通过写入和读取该芯片,我们就可以测试 I2C 总线驱动了。在内核根目录下执行:make  zImage,把生成的新内核烧写到开发板中,依然使用友


善之臂提供的root_qtopoia,因为里面已经包含了I2C-EEPROM测试程序,分别有命令行和图形界面的,其中命令行测试程序名为"i2c",它是基于开源的eeprog软件修改而来的,eeprog软件的下载地址是:http://codesink.org/eeprog.html


在命令行种输入:i2c -w 可以向板子的 24C08 器件中写入数据(0x00-0xff)


在命令行中输入:i2c -r 可以从板子的 24C08 器件中读出输出


1.9.1  在内核中配置看门狗驱动


Linux-2.6.32.2 内核具有完善的 S3C2440 的看门狗驱动,我们只需配置一下就可以使用了。


提示:其实 Linux-2.6.32.2 内核缺省的 mini2440_defconfig 就已经配置好了看门狗驱动,


在内核源代码目录执行:make  menuconfig,进入内核配置主菜单,依次选择进入如下子菜单:


Device Drivers    --->


[*] Watchdog Timer Support    --->


如图,打开看门狗配置菜单,在这里可以选择对 S2C2410/2440 中看门狗的配置选项,以上配置所对应的驱动源代码为:linux-2.6.32.2/drivers/watchdog/s3c2410_wdt.c,感


1.9.2  关于打开和关闭看门狗


在看门狗驱动程序中,我们注意到有这样一个函数,注意其中的红色部分字体:


#define PFX "s3c2410-wdt: "


#define CONFIG_S3C2410_WATCHDOG_ATBOOT  (0)


//这里表明看门狗的默认时间是 15 秒,如果超过此时间系统将自行重启


#define CONFIG_S3C2410_WATCHDOG_DEFAULT_TIME        (15)


static ssize_t s3c2410wdt_write(struct file *file, const char __user *data, size_t len, loff_t *ppos)


{


/*


* Refresh the timer.


*/


if (len) {


if (!nowayout) {


size_t i;


/* In case it was set long ago */


expect_close = 0;


for (i = 0; i != len; i++) {


char c;


if (get_user(c, data + i))


return -EFAULT;


if (c == 'V')


expect_close = 42;


}


}


s3c2410wdt_keepalive();


return len;


}


}


根据此代码,我们判定可以在打开看门狗设备(/dev/watchdog)之后不断的向看门狗随便写入一些数据以实现喂狗操作,但是,当写入"V"时,就可以关闭看门狗了。


1.9.3  测试看门狗


虽然友善之臂提供了一个漂亮的图形界面的看门狗测试程序,但因为操作看门狗比较简单,我们不需要编写任何代码即可测试。


根据上面的分析,我们可以使用 echo 命令向/dev/watchdog 设备随便写入一些数据即可开启看门狗,比如:echo 0 > /dev/watchdog,此时,如果静等 15 秒钟,系统将会自动重启,这样就证实了看门狗已经被开启了。如果 15 秒之内,我们不停地重复"喂狗"操作,也就是不停的使用 echo 命令向看门狗写入数据,那么系统就不会重启。那么,如何停止看门狗呢?根据上面的分析,只要写入"V"就可以了。需要知道的是,但我们使用 echo 命令向/dev/watchdog 写入数据的时候,同时也把"回车"给送进去了,


因此可以这样操作:echo -n V >/dev/watchdog


这里的"-n"意思是"去掉回车",为了测试,你可以先输入:


echo 0 > /dev/watchdog


接着再输入:


echo -n V > /dev/watchdog


然后接着静等,过了好久,系统依然在正常运行,这就证明了看门狗已经被关闭了。

推荐阅读

史海拾趣

Andon Electronics公司的发展小趣事

Andon Electronics 是一家全球领先的电子元件制造商,以下是该公司发展的相关故事:

  1. 公司成立与初期发展:Andon Electronics 成立于 1984 年,总部位于美国加利福尼亚州。最初,公司主要从事 LED 和其他电子元件的生产和销售。由于对高质量产品和客户服务的执着追求,公司迅速赢得了客户的信任和好评。

  2. 技术创新与产品拓展:随着市场需求的变化和技术的进步,Andon Electronics 不断进行技术创新,并逐步扩大产品线。除了 LED 产品外,公司还推出了多种其他电子元件,包括连接器、电缆组件、线束和传感器等。这些产品在汽车、工业、通信和消费电子等领域得到了广泛应用。

  3. 质量管理和认证:Andon Electronics 一直致力于质量管理和产品认证,确保产品符合国际标准和客户要求。公司拥有 ISO 9001 质量管理体系认证,并不断优化生产流程和质量控制体系,以确保产品质量的稳定性和可靠性。

  4. 全球布局和市场拓展:随着业务的不断发展,Andon Electronics 在全球建立了多个生产基地和销售办事处。除了在美国的总部和生产基地外,公司还在亚洲、欧洲和其他地区设立了办事处和生产工厂,以更好地服务全球客户,并适应当地市场的需求。

  5. 可持续发展和未来展望:Andon Electronics 将继续致力于技术创新、产品拓展和质量管理,以满足客户不断变化的需求。公司将继续关注环保和可持续发展,推动节能减排和资源利用效率的提升。同时,Andon Electronics 也将积极响应行业的变革和挑战,不断调整战略,保持在电子元件制造业的领先地位。

Deltron / DEM Manufacturing公司的发展小趣事

为了进一步扩大市场份额和增强竞争力,DEM Manufacturing积极寻求与其他企业的战略合作。公司与其他电子行业的领军企业建立了长期稳定的合作关系,共同开发新产品、拓展新市场。这些合作不仅为公司带来了更多的商业机会,还促进了整个电子行业的发展和进步。

请注意,以上故事梗概是基于已知事实进行的概括和虚构,旨在展示Deltron / DEM Manufacturing公司在电子行业中的发展历程和成就。具体细节和实际情况可能有所不同。

Euroquartz公司的发展小趣事

Euroquartz自创立之初,就将产品质量和客户满意度置于公司运营的核心。为了确保这一点,公司引入了完整的AS9100 Rev D质量体系,并通过了相应的认证。这一体系要求Euroquartz在制造程序和可追溯性方面保持完整的记录,审批机关会定期进行审核,确保品质始终如一。这种对品质的执着追求,为Euroquartz赢得了客户的信赖,也为公司的发展奠定了坚实的基础。

Bomar Interconnect公司的发展小趣事

为了确保产品质量和稳定性,Bomar Interconnect公司建立了严格的质量管理体系。公司引进了先进的质量检测设备和方法,对原材料、生产过程、成品进行全面检测和控制。同时,公司还加强了员工培训,提高了员工的质量意识和操作技能。这些措施有效提升了产品的质量水平,降低了不良品率,为客户提供了更加可靠的产品和服务。

CONTEC公司的发展小趣事

近年来,随着手持式脉搏血氧仪市场的不断扩大,CONTEC公司凭借其在医疗设备领域的技术积累和市场经验,成功切入该领域并取得了显著成绩。公司的手持式脉搏血氧仪产品凭借其高精度、稳定性和便捷性受到了市场的广泛认可。在全球手持式脉搏血氧仪市场规模持续增长的背景下,CONTEC公司凭借其技术优势和市场竞争力,不断拓展国内外市场,实现了快速发展。

请注意,以上故事仅基于公开信息整理,如需更详细和深入的了解,建议查阅相关行业报告或联系公司获取更准确的信息。同时,这些故事仅描述了CONTEC公司在不同发展阶段的一些重要事件和成就,并不代表其全部发展历程。

远东福斯特公司的发展小趣事

2008年,对于CONTEC公司来说是具有里程碑意义的一年。这一年,公司建成了康泰产业园(一期),并进一步加强了研发和生产能力。同时,公司技术中心被省发改委等部门确定为省认定企业技术中心,这标志着公司在技术研发和创新方面得到了官方认可和支持。随着产业园的投入使用,公司的生产规模和效率得到了显著提升。

问答坊 | AI 解惑

2009校“TI”竞赛题目.rar

2009校“TI”竞赛题目.rar…

查看全部问答>

20种CPLD资料

如题 [ 本帖最后由 美目如初 于 2009-8-31 22:48 编辑 ]…

查看全部问答>

你的手机可以变为测试机吗?

联通公司的员工拿的普通的手机也可以测试信号和占用的频点,觉得稀奇, 后来才知道他们是用软件刷出来的,而我们一般要拿专业的测试机去测试~~~~~…

查看全部问答>

值得您下载的RF电路板设计技巧

成功的RF设计必须仔细注意整个设计过程中每个步骤及每个细节这意味着必须在设计开始阶段就要进行彻底的仔细的规划并对每个设计步骤的进展进行全面持续的评估而这种细致的设计技巧正是国内大多数电子企业文化所欠缺的。 …

查看全部问答>

用于音频改为工业用的16位D-A转换器

电路的功能 16位D-A转换器的分辨率为1/65535,即相当于满量程电压的0.0015%,1LSB为-96DB的电平。所以它可作产生高精度波形或测量控流。10V满量程的1LSB为152.6UV,接近噪声电平,所以设计电路时应考虑组装问题。 电路工作原理 本电路采用了廉价 ...…

查看全部问答>

充电状态跟哪个driver相关?

当设备接入usb或者ac充电时,这个事件的通知是来自power还是battery?或者其他?…

查看全部问答>

请大家推荐一套ARM9的学习开发板,要有配套的教材,芯片不要太偏了,最好是三星2440什么的,价格2000块左右都可以接受。谢谢!

请大家推荐一套ARM9的学习开发板,要有配套的教材,芯片不要太偏了,最好是三星2440什么的,价格2000块左右都可以接受。谢谢!…

查看全部问答>

请问从事硬件设计(非电子设计,就是主要不是搞vlsi),应该有什么样的基础,请详细说明

我是一个初学者,我的师兄在大唐电信工作  他本科是学计算机科学与技术的 他研究生学习的是计算机控制技术   他做过汽车电子的项目 他做过嵌入式系统 他很忙 联系不上他 所以问大家 作为硬件工程师  需要那些 ...…

查看全部问答>

北京IT行里混的朋友,进来看看吧,包你不后悔!

   大家好,我叫高峰(Jack Gao)  是group.001@hotmail.com这个群的群主。     我们的群名称是“IT行业离职人员群”,当然,您若是现在还没有离职,也非常欢迎您的加入!有这 么一句话,“人在职场,如履薄冰” ...…

查看全部问答>