嵌入式linux

Jack的嵌入式Linux开发笔记——011——一个完整的开发过程是怎样的

狂风中的少年 提交于 2020-01-12 04:26:54
开发绝不仅仅是写几个函数就万事大吉了的。一个完整的开发过程还有其他几个步骤要做。 日常的开发过程一般是从拿到需求开始的。拿到需求后,我们先要分析需求,然后将需求转化为设计方案文档。 有了设计方案文档,我们就开始进行编写代码的工作。 功能代码写完,还要写单元测试代码,并进行单元测试。同步的还要编写测试用例,测试用例是告诉维护代码的人想要测试这部分代码需要进行哪些操作,预期会得到哪些结果。 到此为止只是对这个功能进行了单元测试而已。还需要将模块整合到系统中,进行系统级的联调测试,同样的也需要写测试用例。嵌入式系统往往由多个模块组成,可能你的模块单独测试时没有问题,但是放到系统中测试就会发现问题了,这些问题往往涉及模块间的接口,协议等等。 整理一下整个的过程,包含几个部分: 需求 设计方案 编码 单元测试编码 单元测试测试用例 系统测试用例 来源: CSDN 作者: zyembed 链接: https://blog.csdn.net/zyembed/article/details/103746985

嵌入式产品:开机设置

醉酒当歌 提交于 2020-01-10 02:17:22
开机时开启或关闭桌面(ubuntu18.04或16.04) 1. 设置为字符界面的命令:sudo systemctl set-default multi-user.target 2. 设置为图形界面的命令:sudo systemctl set-default graphical.target 然后重启 3. 临时使用桌面(重启后还是字符界面): sudo systemctl start lightdm 或者 sudo service lightdm restart Ubuntu14.04之前的版本使用以下方法进入字符界面(未测试) 编辑Grub sudo vim /etc/default/grub 1. 把GRUB_CMDLINE_LINUX_DEFAULT=“quiet splash” 替换为:GRUB_CMDLINE_LINUX_DEFAULT=“quiet splash text” 2. 取消如下一行的注释:#GRUB_TERMINAL=console 3. 更新grub:sudo update-grub 4. 重启进入字符界面:sudo reboot 使用root身份登录 修改 cat /etc/systemd/system/getty.target.wants/getty@tty1.service 把39行改为 ExecStart=-/usr/bin/agetty -

嵌入式Linux学习笔记

冷暖自知 提交于 2020-01-03 19:27:03
一:uboot 1:uboot要能够开机启动,必须根据具体的SoC的启动设计来设计uboot 2:uboot必须进行和硬件相对应的代码级别的更改和移植,才能够保证可以从相应的启动介质启动。uboot中第一阶段的start.S文件就是具体处理了这一块。 3:能引导操作系统内核启动并给内核传参(1)uboot的终极目标就是启动内核(2)linux内核在设计的时候,设计为可以被传参。也就是说我们可以在uboot中事先给linux内核准备一些启动参数放在内存中特定的位置然后传给内核,内核启动后会到这个特定的位置去取uboot传给它的参数,然后在内核中解析这些函数,这些函数将来被用来指导linux内核的启动过程。 4:uboot本质上是一个裸机程序(不是操作系统),一旦uboot开始SoC就会单纯运行uboot(意思就是uboot运行的时候别的程序是不可能同时运行的),一旦uboot结束运行则无法再回到uboot(所以uboot启动了内核后,uboot本身就死了,要想再次看到uboot界面只能重启系统。重启并不是复活了刚才的uboot,重启只是uboot的另一生)。 5:uboot的入口和出口。uboot的入口就是开机自动启动,uboot的唯一出口就是启动内核。uboot还可以执行很多别的任务(譬如烧录系统),但是其他任务执行完后都可以回到uboot的命令行下继续执行uboot命令

嵌入式Linux内核I2C子系统详解

萝らか妹 提交于 2019-12-31 19:44:41
1.1 I2C总线知识 1.1.1 I2C总线物理拓扑结构 I2C总线在物理连接上非常简单,分别由SDA(串行数据线)和SCL(串行时钟线)及上拉电阻组成。通信原理是通过对SCL和SDA线高低电平时序的控制,来产生I2C总线协议所需要的信号进行数据的传递。在总线空闲状态时,这两根线一般被上面所接的上拉电阻拉高,保持着高电平。 1.1.2 I2C总线特征 I2C总线上的每一个设备都可以作为主设备或者从设备,而且每一个设备都会对应一个唯一的地址(可以从I2C器件的数据手册得知),主从设备之间就通过这个地址来确定与哪个器件进行通信,在通常的应用中,我们把CPU带I2C总线接口的模块作为主设备,把挂接在总线上的其他设备都作为从设备。 I2C总线上可挂接的设备数量受总线的最大电容400pF 限制,如果所挂接的是相同型号的器件,则还受器件地址位的限制。 I2C总线数据传输速率在标准模式下可达100kbit/s,快速模式下可达400kbit/s,高速模式下可达3.4Mbit/s。一般通过I2C总线接口可编程时钟来实现传输速率的调整,同时也跟所接的上拉电阻的阻值有关。 I2C总线上的主设备与从设备之间以字节(8位)为单位进行双向的数据传输。 1.1.3 I2C总线协议 I2C协议规定,总线上数据的传输必须以一个起始信号作为开始条件,以一个结束信号作为传输的停止条件。起始和结束信号总是由主设备产生

Jack的嵌入式Linux开发笔记——010——Keep simple, keep small

南楼画角 提交于 2019-12-28 23:42:32
在代码设计中,应该尽量保持函数的短小和简单,避免一个函数做的事情太多,逻辑过于复杂。 先说函数的长度。一个函数如果做的事情很多,代码就会很长,带来的问题就是不容易发现bug。试想一下,如果一个函数只有10行代码,那么如果其中包含错误的话,是很容易发现的。如果一个函数有几百行代码,要在里面找出错误会是一件很崩溃的事情。所以,应该尽量把函数的长度减小。如果一个函数做了5件事情,那么应该把它拆分成5个函数,每个函数分别完成一件事。这样不仅便于发现问题,也方便对函数进行命名。如果我们现在要为一个业务编写函数,该业务流程包含3个步骤,那么更好的方式是先分别写3个函数,每个函数对应于一个步骤,然后写一个总的函数,在该函数中调用那3个标识每个步骤的函数。而不是把所有的东西统统塞到一个函数里。 再说函数内的逻辑。函数内的代码逻辑也要尽量简单。和短函数类似,逻辑简单的函数也更有利于发现错误。所以,如果一个函数的代码逻辑很复杂,就要考虑能否把它拆分成几个不同的函数,拆分后的每一个函数的代码逻辑是简单的。 保持函数简单的另一个方面是尽量使用简单通用的语法,不要写“炫技”的语法。很多编程语言除了基础语法以外,还会提供很多技巧性语法,有些程序员就会喜欢使用这些技巧行的语法,看似很高明,其实对于整个项目来说,是弊大于利的。为什么这么说呢?首先这些技巧性的语法很可能是不通用的,可能到了语言的新版本就不支持了

Linux嵌入式GDB调试环境搭建

隐身守侯 提交于 2019-12-27 04:25:35
======================= 我的环境 ========================== PC 端: CPU:x86_64, 系统:Ubuntu,IP:172.16.2.212 开发板:CPU:sw9820c,系统:openwrt linux,IP:172.16.30.20 PC端安装的 C 交叉编译器为 arm-none-linux-gnueabi-gcc(gcc version 4.6.3),即交叉编译工具链的前缀为 arm-none-linux-gnueabi。 =========================================================== 1、GDB调试方式说明   一般桌面系统如Ubuntu、Centos等可以直接运行gdb + 目标可执行程序, 而嵌入式系统则分情况, 如果性能强劲且调试的源码文件比较少, 也可以编译嵌入式版的gdb执行文件, 即嵌入式gdb + 目标可执行程序。 如果性能弱或者调试对象的源码文件多可采用分离法, 即PC端运行gdb, 同时源码也在PC端, 而目标可执行程序放到开发板, 那怎么联系呢, 所以开发板端还需要运行gdbserver, 与PC端的gdb通过网络通信。 PC端也称客户端, 开发板端为服务端, gdbserver 接收 gdb 所传送的命令(list, step等),

嵌入式移植GDB(gdb7.6)

百般思念 提交于 2019-12-25 06:44:10
海思SDK环境下实现: 1、下载gdb:   下载地址为: http://ftp.gnu.org/gnu/gdb/ 2、解压缩: tar xvf gdb-7.6.tar.bz2 3、进入该目录 cd gdb-7.6 4、配置:(生成makefile)   1. ./configure --target= arm-hisiv300-linux --prefix=/root/gdb-build   注:--target=arm-hisiv300-linux意思是说目标平台是运行于ARM体系结构的linux内核;--program-prefix=arm-hisiv300-linux是指生成的可执行文件的前缀,比如arm-hisiv100nptl-linux-gdb,--prefix是指生成的可执行文件安装在哪个目录,这个目录需要根据实际情况作选择。如果该目录不存在,会自动创建,当然,权限足够的话。 5、编译、安装 make ;make install 会在--prefix指定的目录下生成三个子目录:bin、lib、share,我们需要的arm-linux-gdb就在其中的bin目录下。 这样编译出来的gdb程序其实是有点问题的,在运行时会报 “Remote 'g' packet reply is too long ” 的错误,修改gdb/remote.c文件 6113行 if (buf

【linux】嵌入式 Linux 启动时间优化

久未见 提交于 2019-12-24 12:56:50
1 简介 本章包含的话题有启动时间的测量、分析、人因工程(human factors)、初始化技术和优化技巧等。 产品花在启动方面的时间直接影响终端用户对该产品的第一印象。 一个消费电子设备不管如何引人注目或者设计得怎么好,设备从关机状态到可交互的使用状态所需的时间对于获得正面的用户体验尤为关键。案例 #1 就是在关机状态从头启动一个设备的例子。 启动一个设备涉及到许多步骤和一系列的事件。为了使用前后一致的术语,消费电子 Linux 论坛(CE Linux Forum)的启动时间优化工作组起草了一个术语词汇表,该表包括了相关术语在该领域内通用的定义。该词汇表如下: 启动时间相关的词汇表 2 技术/项目主页 下面主要介绍与减少 Linux 启动时间有关的各种技术。 有一部分描述了 eLinux.org 上可以下载的本地补丁,而其余部分则介绍了在其他地方维护的项目或者补丁。 2.1 测量启动时间 Printk Times – 用于显示每个 printk 的执行时间 内核函数跟踪(Ftrace) – 用于报告内核中每个函数的调用时间 Linux 跟踪工具箱(LTT) – 用于报告确切的内核和进程事件的时间数据 Oprofile(译注:最新替代品是 perf) – 通用的 Linux 分析器(Profile) Bootchart – 用于 Linux 启动过程的性能分析和数据展示

嵌入式WeB服务器的实现——BOA移植

一笑奈何 提交于 2019-12-24 09:11:42
文章目录 简介 下载BOA 配置BOA Boa的配置 移植Boa到开发板上去 测试BOA服务器能否正常工作 简介 由于嵌入式设备资源一般都比较有限,并且也不需要能同时处理很多用户的请求,因此不会使用Linux下最常用的如Apache等服务器,而需要使用一些专门为嵌入式设备设计的Web服务器,这些Web服务器在存贮空间和运行时所占有的内存空间上都会非常适合于嵌入式应用场合。 典型的嵌入式Web服务器有Boa (www.boa.org)和thttpd (http://www.acme.com/software/thttpd/)等,它们和Apache等高性能的Web服务器主要的区别在于它们一般是单进程服务器,只有在完成一个用户请求后才能响应另一个用户的请求,而无法并发响应,但这在嵌入式设备的应用场合里已经足够了。 我们介绍比较常用的Boa服务器的移植。Boa是一个非常小巧的Web服务器,可执行代码只有约60KB。它是一个单任务Web服务器,只能依次完成用户的请求,而不会fork出新的进程来处理并发连接请求。但Boa支持CGI,能够为CGI程序fork出一个进程来执行。Boa的设计目标是速度和安全,在其站点公布的性能测试中,Boa的性能要好于Apache服务器。 下载BOA 下载地址: BOA官网下载地址 进入官网后点击下图所示处进行下载 目前最新版本是0.94.13

路由器开发

最后都变了- 提交于 2019-12-18 01:28:01
宽 带上网已经不是什么新鲜事情,人们对相关的网络器件已经不再陌生,比如说常见的路由器。对于一般的网络用户,他们能知道怎样使用路由器来上网、玩游戏等就 已经感到很满足了,通常情况下对路由器的深层技术很少去过问研究,但做为兴趣广泛的技术爱好者,对这方面的知识是非常感兴趣的。但限于各种条件的制约,这 些爱好者都非开发者,很大程度上无法深入了解真正的技术实现过程以及相关的核心内幕。正是基于此点,笔者凭借自身的知识沉淀,尽最大努力为爱好技术的读者 架设一坐能通向深层核心的桥梁,为大家揭开路由器的神秘面纱,剖开其核心内脏。为使读者能清晰明白的理解掌握,笔者尽量将专业的技术内容转化为容易接受的 知识讲解,其中可能有不足偏颇之处,还请大家多见谅。 概述 什么是路由器? 互联网是依靠路由器连接起来的,路由器是互联网或者说IP网络的核心设备。宽带接入的不断增长,带动了路由器的需求不断增加。 路由器究竟是什么样的技术产物? 谈到路由器的开发,我们就不免要谈到“嵌入式”设备的开发,没错,通俗的说,路由器就是一种嵌入式产品。那么究竟什么是嵌入式设备呢?    其实就目前而言,嵌入式设备已经不断深入我们的日常生活方方面面。通俗的讲,嵌入式设备是指具有计算机功能,但又不称为计算机的设备或器材,它几乎包括 了我们周围的所有电器设备 PDA、手机、机顶盒、汽车、微波炉、电梯、安全系统、自动售货机、医疗仪器、立体音响