自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(43)
  • 资源 (1)
  • 收藏
  • 关注

原创 uC/OS 的进程调度(下)

上文提到uC/OS进程调度的前两个主题:何时进行调度、如何选择下一个活动进程。本文来分析最后一个主题,即如何实现进程切换。从上文的分析可知,uC/OS在实现调度时,涉及的最核心的函数只有三个:OSStartHighRdy()、OS_Sched()及OSIntCtxSw(),它们分别对应系统启动时、进程上下文时、中断上下文时的进程切换。这些函数的实现基本都是体系结构相关的,需要在移植操作系统时实现。这

2016-05-04 21:29:50 834

原创 uC/OS 的进程调度(上)

操作系统最重要的任务之一就是进程调度,它涉及三个主要方面:何时进行调度如何选择下一个活动进程如何实现进程切换每种操作系统差别很大,本文对uC/OS的进程调度机制进行一些细致分析。

2016-04-29 20:22:34 1316

原创 《Linux内核分析》第六课笔记

读书是一个由厚读薄,再由薄读厚的过程。孟宁的《Linux内核分析》在课上把繁杂庞大的Linux内核抽像出主脉络,本文试图探索第六课中创建进程这一主题迷途幽径。同时本文也是《第四讲 进程管理 》的补充。一般操作系统都有类似于create_task()之类的API来凭空创造出进程。Linux沿袭自Unix,采用了另一种思路,即fork+exec。所有进程都先由一个现有进程复制而来,再改变一些属性形成新进

2016-03-30 18:48:25 2069

原创 《Linux内核分析》第五课笔记

孟宁老师的《Linux内核分析》第五课内容与授课大纲上有出入,实际上继续在讲系统调用。前文《Linux内核分析》第四课笔记中已经提前分析了本课的主要内容,这里再做一些补充。

2016-03-22 23:34:02 670

原创 《Linux内核分析》第四课笔记

在孟宁老师的网易云课堂《Linux内核分析》第四课上,简单讲述了系统调用的基础知识。其中有几个问题课程中没有详述。本文对这几个问题进行展开描述。

2016-03-16 19:03:36 838

原创 控制Linux内核启动中的打印

如果正常配置了输入输出终端,则内核启动过程中会将很多信息输出到控制台上。这些信息中有些表示严重错误,有些只是一般的提示信息。 在平台成熟后,继续保留这些信息既不美观,也会影响启动速度(串口的波特率很低)。因此要尽量屏蔽不重要的信息。这需要对内核进行一些改造。

2016-03-13 18:25:29 8736

原创 DM8168外挂IC卡读写异常

在新研FXX板的DM8168上,有一个SPI接口的IC卡,使用的是AT45DB041芯片。在硬件测试时,对IC卡读写数据都不正确。而同样的代码和同一张卡在HXX板上运行没有任何问题。 在分析和解决该问题过程中逐步发现,这涉及了硬件和软件两个方面。

2016-03-10 19:41:21 806

原创 《Linux内核分析》第二课笔记

在孟宁老师的网易云课堂《Linux内核分析》第二课上,基于Linux3.9.4内核打了一个小补丁,在其上运行了一个小的调度程序来展示进程切换的基本原理。本文来简单分析一下这个补丁,将其简易版本的进程管理与Linux标准方法做了简单对比。

2016-03-05 19:56:22 797

原创 移植uC/OS到CK-CPU

背景某自研芯片使用了杭州中天微研发的CK-CPU内核。中天微已经移植了uC/OS实时操作系统和Linux操作系统。然而有两方面原因要求我们再进行一些额外的适配工作。

2016-02-28 18:40:57 1341

原创 Linux内核中DM8168的网口驱动移植

DM8168其EMAC0直接用GMII接口连接到对端某芯片上。因此需要修改内核驱动代码来完成适配。

2016-02-23 23:55:15 2730

原创 U-Boot中改用DM8168的UART0

背景在DM8168的EVM板中,DM8168使用UART2作为控制台串口,但在新研FXX板中,DM8168改用UART0,这就需要修改U-Boot源码。

2016-02-19 22:55:07 1351

原创 U-Boot中改用DM8168的网口1

DM8168在U-Boot默认使用且只支持EMAC0实现网口通信。为改用EMAC1,需要对U-Boot做一些修改。

2016-02-18 20:54:20 2408

原创 利用Linux内核编译输出信息构建内核源码树

编译内核使用的配置文件可以从繁杂的代码树中挑选出需要的枝干。因此我们添加代码时,要借鉴配置文件对代码树进行合理修剪。通过配置文件和Makefile就能找到所有包含的目录和文件,另一种更简单一些的方法是借鉴内核编译的输出。

2016-01-19 21:42:32 898

原创 Linux shutdown命令

SSH远程连接虚拟机的Ubuntu,使用完毕想要关机时调用命令sudo shutdown now后,并没有完全关机。 网上查资料发现,shutdown now并不能完全关机,而是要

2016-01-17 22:50:30 1463

原创 第五讲 中断、异常和信号

在第一讲中提到过异常的分类,根据同步或异步产生、无意或故意产生以及最终的的返回行为可以分为四类。但不管是哪种,CPU的响应过程基本一致。即CPU根据中断向量,在内存中找到相应的服务程序入口并调用该服务程序。中断向量和中断处理函数内内核定义。处理方法也不尽相同。对于异常,一般是抛出一个信号给当前进程,因此在本讲的最后将涉及信号相关的内容。

2016-01-05 20:53:01 3954

原创 connect()函数阻塞

在XX板的C6678上运行SYS/BIOS操作系统和NDK协议栈。应用层有一个TCP客户端去连接PC上的服务器,然后通过这个连接互发心跳。 WinXP回复RST,但Win7却什么都没回。RFC中对这个行为并没有作出明确规定,只是称服务器"may"发送RST,言下之意当然也可以"may not"。而不同的Windows版本的协议栈会有不同的行为,才导致了有时候会出问题有时候没问题。

2016-01-05 20:46:00 3848

原创 网络相关问题(下)

DM8168芯片运行Linux操作系统,有两个物理网口。在某项目中需要绕过协议栈直接收发以太网帧,本文总结调试过程中的几处注意事项。

2015-12-07 21:43:01 820

原创 HPI中断丢失

背景XX板上DM8168的GPMC接口与C6455的HPI接口连接,既用作C6455的启动接口,又用作启动完成后两芯片的数据传输通道。 上架使用一段时间后,发现几天内HPI通道会死一次,且多个板子都出现了这样的现象。

2015-12-03 20:34:28 821

原创 C6416启动失败

C6416老的BIN文件通过HPI启动,闪灯程序运行正常。然而改用CCS5.4下开发的闪灯程序后,主机下载BIN文件功能不正常。灯只亮不闪。

2015-12-02 22:17:20 2068

原创 Ubuntu离线搭建NFS服务器

Ubuntu默认不开启NFS服务,需要手动配置。网上很容易查到方法,即使用apt在线更新方式。然而由于某些限制,开发机器不能联网,这就需要使用离线安装包的方式。

2015-12-01 20:17:59 6380

原创 搭建SVN仓库

本文总结了SVN的安装和配置工作。

2015-12-01 20:05:44 700 1

原创 VMware配置网络连接

在我的开发环境中,主机使用笔记本无线网卡,在虚拟机VMware中安装Ubuntu。需要在主机中SSH连接Ubuntu,还需要在虚拟机中上网。因此主机和虚拟机要在一个网络中,所以选择桥接模式。但是在使用过程中,经常遇到各种问题,有时候关机重启后网络就出现问题。最后经过一番学习和折腾最终解决了问题。

2015-11-29 23:17:14 631

原创 第四讲 进程管理

本节我们先讨论进程的一些静态特性,然后描述进程的创建和撤销。最后研究内核如何切换进程。

2015-11-29 22:18:05 1068

原创 重新编译C6455的CSL库

C6455的最新CSL库版本为3.0.10.2,发布时间为2006年9月。该库包含开源C代码和预编译库,支持大小端两种模式,文件名分别为csl_c6455e.lib和csl_c6455.lib,均为COFF格式。而目前XX板上的C6455处理器输出文件为小端ELF格式,因此需要重新编译CSL库才能在工程中正常使用。本文介绍使用CCS重新编译C6455 CSL的具体方法。

2015-11-26 21:44:16 1567 2

原创 在C6455上移植NDK

NDK(Network Developer’s Kit)是TI提供的用来在嵌入式处理器上开发基于网络程序的开发平台,当前支持TMS320C6000 DSP系列和ARM处理器。本文介绍将C6455 NSP移植到NDK2.23的方法。

2015-11-26 21:39:59 3471 6

原创 重新编译NDK库

NDK(Network Developer's Kit)是TI提供的用来在嵌入式处理器上开发基于网络程序的开发平台。NDK包含开源C代码和预编译库,用户可以对源码进行修改后自行重新编译。本文介绍生成C6455所需格式的库文件的具体方法。

2015-11-26 21:29:50 2438 1

原创 DDR引发的问题(下)

DDR使用控制器来完成底层时序和刷新操作,需要事先对DDR控制器进行适当的配置。

2015-11-11 21:31:25 3553

原创 DDR引发的问题(上)

在C6455上有一片外挂DDR2,当把一大段初始化数据定义到DDR中时,发生了链接错误。

2015-11-10 21:06:51 3224

原创 网络相关问题(上)

TCP/IP网络是一个复杂的话题,其中涉及到的驱动、协议栈和应用编程每个主题都够写一本书。事实上确实有许多这方面的巨著,如《TCP/IP详解》三卷本、《UNIX网络编程》等等。这里先列举几个印象比较深刻的案例,后续还会再补充。

2015-11-06 20:17:45 538

原创 邮箱与信号量相关问题

嵌入式操作系统也会提供邮箱和信号量,用作进程同步、临界区保护、简单的消息传递等。在使用过程中如果设计不当会发生许多问题,本文列举了我在调试过程中遇到的一些相关案例。

2015-11-06 20:03:37 2400

原创 内存相关问题

内存是嵌入式系统的宝贵资源,在没有复杂操作系统进行内存管理的情况下,程序直接访问实地址,因此经常会遇到各种问题。本文介绍了我在调试过程中积累的内存方面问题的一些案例。

2015-11-06 20:00:06 793

原创 C6414上移植LwIP

在新研NXX板上使用了若干片C6414,其中有两片用EMIFB接口连接DM9000芯片扩展出网口,上层采用LwIP协议栈。因此需要移植LwIP协议栈和DM9000的驱动。

2015-11-04 19:10:10 1568

原创 实时操作系统若干问题

可剥夺型实时操作系统特点是高优先级的任务可以无条件抢占CPU时间,这种情况下低优先级任务得不到任何运行的机会。在实时操作系统的任务设计中,任务间的分工、时序、优先级设计都是非常重要的方面,设计不当将引起诸多问题。本文总结了我在设计中遇到的几个这样的问题。

2015-11-04 19:08:28 899

原创 C6678网口初始化失败

C6678的网络协处理器NETCP模块有两个对外千兆网口。工程的优化属性配置为O3优化时,网口启动有一定概率失败。将O3优化取消再测,则启动一直能成功。

2015-11-04 19:05:23 3339 1

原创 C6455上移植SYS/BIOS

在C6455上默认是采用了DSP/BIOS+LwIP,当开发环境统一到CCS5.4后希望将操作系统也进行统一,从而使应用一些模块在DSP间可以灵活移植。主要的工作有如下几个方面。移植BIOS操作系统、移植NDK、ABI兼容性。

2015-11-04 19:03:56 3360

原创 NDK持续打印

NDK有四种不同的打印级别,分别对应于不同的信息级别。然而在NDK2.23中,这个配置不能成功生效,原因是NDK有一个小的bug。

2015-10-30 17:16:06 829

原创 SPI Flash数据移位

C6678外挂了一片SPI接口的Nor Flash,型号为Micron N25Q128A13BSF404F,其容量为128Mbit,由于电平匹配问题中间使用了一片EPLD作电平转换,将6678的1.8V电平逻辑转换为3.3V。在测试过程中发现当SPI的时钟配高一些(50MHz)的时候,就会出现Flash初始化不通过,具体现象是读取ID不正确,与正确的ID总是移位1个比特。

2015-10-30 16:57:46 3124

原创 C6678的SPI Flash启动失败

源码中对启动参数表的定义与文档中不一致

2015-10-30 16:42:36 6257 2

原创 第三讲 进程地址空间

本讲讲以线性区为基础讲述与进程地址空间相关的内容。首先介绍进程地址空间的概念,然后介绍用于描述进程地址空间的内存描述符,以及其中最重要的线性区的概念。内核对进程线性区与物理地址的映射处理在缺页异常处理程序中完成,因此之后插入对的详细解读。最后是进程地址空间的创建和删除过程,以及特殊线性区——堆的管理。

2015-10-28 21:03:07 5976

原创 第二讲 内存管理

本讲讲述内存管理方法。本讲包含三个方面的内容: 首先物理内存是内存管理的基础,要解决如何对其有效管理的问题,因此第一部分讲述页框管理。然后是高端内存管理的三种机制:永久内核映射、临时内核映射和非连续内存区管理。最后内核如何处理以字节为单位的内存请求?这是第三部分内存区管理的内容。主要讲述slab分配器。

2015-09-24 20:52:36 1764

NFS服务器离线安装包

Ubuntu默认不开启NFS服务,需要手动配置。网上很容易查到方法,即使用apt在线更新方式,调用 sudo apt-get install nfs-kernel-server 即可。然而当开发机器不能联网时,就需要使用离线安装包的方式,这是所需的全部6个安装包。 解压后依次调用 sudo dpkg -i xxx.deb 根据提示修改安装次序。

2015-12-01

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除