
Embeded Software Development
hello-linux
9年USB开发经验 + 6年网络及以太网驱动开发经验 + 2年PCIe驱动开发经验 + 5年romcode开发经验,专注网卡驱动、网络协议(TCP/IP)、USB驱动及应用开发。
展开
-
嵌入式系统中的AB分区
在实践中,嵌入式设备会有两个独立的分区,即A分区和B分区。在任何时候,一个分区运行当前的操作系统,而另一个分区则用于下载和安装新的更新。更新完成后,系统会在下次启动时切换到包含新版本的分区,同时旧版本保留在另一分区作为备份。这种设计提高了系统的稳定性和可靠性,是现代嵌入式系统中常见的一种做法。嵌入式系统中的AB分区是一种重要的机制,主要用于确保系统更新的安全性和可靠性。这是因为旧的系统版本仍然保存在另一个分区中。1. 无缝更新:AB分区允许系统在后台下载和安装更新,而不影响当前运行的系统。原创 2024-01-05 17:52:47 · 1902 阅读 · 0 评论 -
ARM嵌入式系统malloc的实现(C源码)
在ARM嵌入式系统实现malloc内存分配机制。 #include "include/lib_replace.h" #include "usb.h"//#define TEST_MALLOC y#ifdef TEST_MALLOC#include <stdio.h>#define PRINT printf#else#define PRINT print#endif#define MEM_SIZE 0x1500 //5kchar __att.原创 2020-08-01 10:53:34 · 1459 阅读 · 0 评论 -
Linux minicom串口通讯
串口:USB转串口ch340开发板:A33,运行linux-3.4.39主机:Ubuntu 14.04---------------------------------------------- 1. 安装minicom串口软件:sudo apt-get install minicom2. 接上串口,ls /dev 可看到ttyUSB0设备3. sudo mini...原创 2018-09-02 10:50:36 · 2725 阅读 · 0 评论 -
linux dmaengine编程
开发板:A33,运行linux-3.4.39主机:Ubuntu 14.04---------------------------------------------- DMA是Direct Memory Access的缩写,顾名思义,就是绕开CPU直接访问memory的意思。在计算机中,相比CPU,memory和外设的速度是非常慢的,因而在memory和memory(或者memor...原创 2018-09-02 11:23:13 · 2355 阅读 · 2 评论 -
全志A33-linux内核early_printk分析及使用
分析Linux内核启动流程时可以知道,在调用setup_arch函数之前就已经调用过printk函数了,但是这个时候的printk函数只是将打印信息放在缓存区中,并没有打印到控制台上,因为这个时候控制台还没有被初始化。 只有在start_kernel函数中的console_init函数被调用后,控制台才会被注册、初始化,printk函数打印的内容才会被真正地输出到屏幕上。...原创 2018-09-02 11:36:35 · 1912 阅读 · 0 评论 -
linux下控制gpio的几种方法
arm linux下写驱动控制gpio时,有两种方法: 1. 用ioremap()得到寄存器的地址,然后用iowrite32()或writel()函数写寄存器控制gpio1)查datasheet上GPIO的物理地址2)ioremap 把物理地址映射到虚拟地址3)然后直接操作映射出来的地址注:由于A33没有提供datasheet,无法知道寄存器地址,所以未测试。 2....原创 2018-10-07 20:33:54 · 14751 阅读 · 0 评论 -
linux misc device字符杂项设备驱动
杂项设备也是在嵌入式系统中用得比较多的一种设备驱动。miscdevice共享一个主设备号MISC_MAJOR(即10),但次设备号不同。misc设备其实就是特殊的字符设备,主设备编号采用10,并且可自动生成设备节点。杂项设备作为字符设备的封装,为字符设备提供的简单的编程接口,如果编写新的字符驱动,可以考虑使用杂项设备接口,方便简单,只需要初始化一个miscdevice的结构,调用misc...原创 2018-10-07 20:38:05 · 1896 阅读 · 0 评论 -
静态库的编译和链接
静态库调用在外部文件中定义的函数:即在静态库中声明并调用函数,但是在外部文件中实现该函数。在编译成静态库时,源文件中可以只提供函数声明,具体的实现交给调用该静态库的人去做。 假设有a.c和b.c,a.c中声明并调用了fun1(),但是在b.c中实现fun1()。a.c#include <stdio.h>extern void fun1(void);int a...原创 2018-12-01 16:58:52 · 2460 阅读 · 0 评论 -
busybox tftp
BusyBox下的tftp是一款应用于嵌入式开发系统上的一款小巧tftp工具,为开发者提供一个tftp服务的使用平台。通常是,PC开发主机作为服务器(Server),开发系统(板)作为客户端(Client),可以实现从Server下载文件到Client,或者从Client上传文件到Server。参数说明: -l local的缩写,后跟存在于Client的源文件名,或下载...原创 2019-03-09 15:18:55 · 758 阅读 · 0 评论 -
代码单元测试:gtest
Gtest是Google公司发布的一款非常优秀的开源C/C++单元测试框架,已被应用于多个开源项目及Google内部项目中,知名的例子包括ChromeWeb浏览器、LLVM编译器架构、ProtocolBuffers数据交换格式及工具等。在我们开发规范的代码时候,要想办法构造简单的测试用例进行调试,因此针对gtest中的三种事件机制进行简单的分析。FeaturesAnxUnittest ...原创 2019-04-08 19:43:28 · 1014 阅读 · 0 评论 -
代码单元测试工具:gmock
Mock,更确切地说应该是Mock Object。当我们在单元测试、模块的接口测试时,当这个模块需要依赖另外一个/几个类,而这时这些类还没有开发好,这时我们就可以定义Mock对象来模拟那些类的行为。mock工具的其中一个非常重要的作用是指定函数的行为(模拟函数的行为)。可以对入参进行校验,对出参进行设定,还可以指定函数的返回值。Google's framework for w...原创 2019-05-12 09:51:49 · 1454 阅读 · 0 评论 -
适用于嵌入式系统的web server:thttpd的介绍与使用
thttpd is a simple, small, portable, fast, and secure HTTP server.Simple:It handles only the minimum necessary to implement HTTP/1.1. Well, maybe a little more than the minimum.Small:See the...原创 2019-05-12 10:03:16 · 4824 阅读 · 0 评论 -
WEB通用网关接口:CGI简单教程
CGI 全称为Common Gateway Interface (通用网关接口),目的是能够让服务器能够方便的调用外部程序。CGI本身是一套协议和规范,原则上只要是拥有读写文件功能的编程语言都可以用来编写CGI程序,例如C,C++,Perl,Visual Basic,Shell等等,历史上用来编写CGI程序使用最广泛的是Perl语言,连PHP一开始也是用Perl编写的,估计也受这个传统的...原创 2019-05-12 10:10:31 · 4216 阅读 · 0 评论 -
全志A33-串口SLIP的使用
开发环境开发板:A33-Vstar开发板系统:LinuxUbuntu版本:Ubuntu14.04------------------------------------------- 基本思路:在链路层使用SLIP协议,并且使用串口作为物理通信链路,与PC进行网络通信。A33开发板串口2-----------CH340---------------PC 1. 为...原创 2018-08-05 10:29:50 · 2249 阅读 · 0 评论 -
全志A33-ARM编译并安装net-tools
开发环境开发板:A33-Vstar开发板系统:LinuxUbuntu版本:Ubuntu14.04编译器:arm-linux-gnueabi-gcc------------------------------------------- Net-tools 包含一系列程序,构成了 Linux 网络的基础。安装下列程序: arp, dnsdomainname (link ...原创 2018-08-05 10:25:21 · 2408 阅读 · 0 评论 -
嵌入式开发常用工具软件
项目进度管理:Microsoft project 软件版本控制软件:Git、SVN、CVS bug管理软件:bugzilla 文件管理:有道云笔记、evernote、Wiki Server、Google DOCs 项目文件管理系统:trac Project 代码静态测试:PC-Lint、LogiScope 嵌入式集成开发环境(IDE):keil、IAR、VS、eclipse 代码阅读...原创 2017-03-20 17:10:02 · 15091 阅读 · 4 评论 -
rw data 、ro data 和 code详解
ARM7+iar+μc/os环境下:1 .code.text, 代表程序段2 .ro dataconst变量或字符串常量3 .rw data1) .data 赋值了的全局变量或static变量、全局数组2) .bss 未赋值的全局变量或static变量3) stack4) heap事实上,一个程序从编译到运行,对变量空间分配的情况如下:A. 赋值了的全局变量或static变量=>...原创 2018-04-02 08:44:05 · 7435 阅读 · 3 评论 -
cygwin下使用gcc编译c可执行程序
环境:win10 64 + cygwin--------------------------------------cygwin默认没有安装vim和gcc。1. 安装vim运行setup-x86_64.exe,进入应用包安装界面,搜索关键字vim,选择vim安装。2. 安装gcc 运行setup-x86_64.exe,进入应用包安装界面,搜索关键字gcc,选择安装下面三个包。3. 编译、测试3.1...原创 2018-03-27 21:27:57 · 15480 阅读 · 0 评论 -
如何利用Callgraph生成函数调用图?
Ubuntu版本:ubuntu-gnome-16.04-desktop-amd64,gnome版-----------------------------------------------------------------------1. 安装 CallgraphCallgraph 实际由三个工具组合而成。一个是用于生成 C 函数调用树的 cflow 或者 calltree,下文主要介绍 cf...原创 2018-05-06 21:02:31 · 12148 阅读 · 0 评论 -
全志A33-BootLoader的两个阶段:boot0和second boot
开发板:A33,运行linux-3.4.39主机:Ubuntu 14.04---------------------------------------------- BootLoader阶段输出的信息: HELLO! BOOT0 is starting! boot0 version : 3.1.0reg_addr 0x01f00100 =0x00000000...原创 2018-07-06 14:14:26 · 7996 阅读 · 0 评论 -
全志A33-编译uboot
开发板:A33,运行linux-3.4.39主机:Ubuntu 14.04---------------------------------------------- 1. 进入uboot目录:~/A33-Vstar/dragonboard/brandy/u-boot-2011.09编译涉及的重要文件:build.sh、Makefile 2. 编译2.1...原创 2018-07-06 15:26:23 · 7078 阅读 · 8 评论 -
全志A33-修改linux kernel启动参数
开发板:A33,运行linux-3.4.39主机:Ubuntu 14.04---------------------------------------------- 1. 修改kernel启动参数的几种方式1)make menuconfig里修改“General Setup”子菜单中的“Default kernel command string” 选项,通过修改这个选项...原创 2018-07-06 15:28:55 · 9013 阅读 · 1 评论 -
全志A33-ARM linux开机进入uboot命令行
开发板:A33,运行linux-3.4.39主机:Ubuntu 14.04---------------------------------------------- 复位或启动开发板后,等串口输出秒读提示,如果是标准uboot,按任意键可中断启动过程,进入uboot命令行界面。A33 uboot默认bootdelay为0,所以正常开机情况下不能进入uboot命令行。如果...原创 2018-07-06 15:31:48 · 16962 阅读 · 0 评论 -
实例分析objdump反汇编用法
Ubuntu版本:ubuntu-gnome-16.04-desktop-amd64,gnome版-----------------------------------------------------------------------------------objdump命令是用查看目标文件或者可执行的目标文件的构成的gcc工具。1. 准备代码hello.c#include <linux...原创 2018-07-06 15:39:16 · 17907 阅读 · 3 评论 -
全志A33-ARM开发板通过NFS与Ubuntu共享文件
环境:win10开发板:全志A33Ubuntu版本:ubuntu-gnome-16.04-desktop-amd64,gnome版------------------------------------------------------------------------------------- IP地址:PC:169.254.247.140A33:169.254....原创 2018-08-05 09:59:28 · 926 阅读 · 1 评论 -
全志A33-gpio驱动程序
开发环境Ubuntu:14.04开发板:A33-Vstar开发板系统:android 4.4 、linux-3.4.39交叉编译器:arm-linux-gnueabi-gcc 4.7.3----------------------------------------------------- 1. 驱动程序1)采用Linux gpio api,具有很好的移植性2...原创 2018-08-05 10:13:40 · 4842 阅读 · 7 评论 -
全志A33-串口的使用
开发环境开发板:A33-Vstar开发板系统:Linux-------------------------- 1. A33串口在设备文件下显示为: /dev/ttyS0 /dev/ttyS1 /dev/ttyS2 等。2. 将A33 串口2通过ch340接到pc(Windows),打开串口调试助手。3. 数据收发测试登录A33终端,执行:ls/dev 可看到ttyS...原创 2018-08-05 10:18:52 · 5116 阅读 · 0 评论 -
C语言编程规范
为何需要进行规范编程?1、程序员花更多的时间在调试、维护和升级已有代码上,而不是编写新的代码;2、程序最重要的是正确性,其次是可维护性,最后才是效率;3、学习如何写优美的程序与学习如何正确地编写代码同样重要;4、一个运行正常但没有注释的程序如同一个等待爆炸的定时炸弹,因为早晚会有人修改或升级这个程序;5、好风格应该成为一种习惯。如果你在开始写代码原创 2017-03-22 14:43:41 · 828 阅读 · 0 评论