嵌入式Linux
mkelehk
「可以做」跟「做得好」相差很远!
展开
-
linux内核中断子系统基础知识
韦东山:一文看看尽linux对中断处理的前世今生韦东山:剥丝抽茧分析linux中断系统的重要数据结构韦东山:在Linux设备树(DTS)中指定中断_在代码中获得中断原创 2020-05-15 10:40:37 · 163 阅读 · 0 评论 -
解决Linux内核问题实用技巧之 - Crash工具结合/dev/mem任意修改内存
Linux内核程序员几乎每天都在和各种问题互相对峙: 内核崩溃了,需要排查原因。 系统参数不合适,需要更改,却没有接口。 改一个变量或一条if语句,就要重新编译内核。 想稍微调整下逻辑却没有源码,没法编译。 ... 解决每一类问题都需要消耗大量的时间,特别是重新编译内核这种事情。于是,每一个Linux内核程序员或多或少都会掌握一些Hack技巧,以节...转载 2020-01-16 14:43:34 · 1717 阅读 · 0 评论 -
tty终端设置杂记
使得终端重定向到串口/dev/ttyAMA2microcom -t 10000 -s 115200 /dev/ttyAMA2关闭/开启终端的回显stty -echostty echosetconsole,百度百科说“setconsole [video][serial][ttya][ttyb],设置系统终端”,我没有用过!...原创 2019-11-15 22:58:32 · 563 阅读 · 0 评论 -
RGMII/MII不使用PHY和变压器直连通信
没有物理层的PHY芯片,也就是无法使用MDIO接口配置IEEE相关的寄存器。有时我们只要板子内两个CPU或者FPGA与CPU间进行点对点通信,那就无需使用PHY和变压器了!节省成本比较新的linux内核能直接支持这种应用,即所谓的fixed-link。下面的例子是TI am3358官方评估板BBB版的设备树摘录:红色为关注点cpsw_default: cpsw_default ...原创 2019-10-10 19:20:31 · 8511 阅读 · 7 评论 -
内核符号表的生成和查找过程
https://blog.csdn.net/jasonchen_gbd/article/details/44025681转载 2019-10-08 23:07:59 · 285 阅读 · 0 评论 -
嵌入式linux产品出厂程序调试手段
嵌入式设备有调试不方便的麻烦,这包括软件、硬件、环境部署上的困难。 如无特殊说明,下文描述的仅是嵌入式linux程序,而不是单片机或FPGA程序,它们有自己独特的调试手段,请知悉! 软件开发时,因gdb是命令行调试工具,我们不能像vs2015那样GUI方式下断点进行调试;硬件出问题时,因拆除外壳进行示波器测量困难,尤其是测试点在pcb板背面时,需...原创 2019-10-08 22:33:46 · 464 阅读 · 0 评论 -
linux kernel编译杂记
linux内核源码下载地址:https://www.kernel.org/选中mainline或者stable版本的“[view diff] [browse] [changelog]”就可以查看它们的差异、git log等内核邮件列表网址:http://vger.kernel.org/vger-lists.html使用教材编译工具链编译kernel后,需要安装驱动,以便...原创 2019-08-02 10:14:03 · 194 阅读 · 0 评论 -
海思Hi3536交叉编译eudev和libusb库
想编译llibusb-1.0.22:./configure --host=arm-hisiv400-linux --prefix=`pwd`/install但发现有如下错误:...checking libudev.h usability... nochecking libudev.h presence... nochecking for libudev.h... nocon...原创 2019-07-14 16:59:28 · 5499 阅读 · 0 评论 -
linux使用socket操作串口等总线
要使用标准的套接字接口来操作串口,肯定需要将以太网换成串口,即在linux内核中获取到链路层帧数据包,然后使用串口发出去,同理,使用串口接收到数据流后,封装成链路层帧数据包,传回给linux网络协议栈。 可以轻易实现点对点的通信,但坏处是串口速度慢,同理,可以把串口换成其他通信,譬如i2c、spi、local bus、usb等等你能想到的总线均能作为链路层,他们的...原创 2019-03-29 10:22:29 · 932 阅读 · 0 评论 -
linux4.x最简单的platform驱动
对应平台的设备树文件中添加://add for demo/ { demo { compatible = "ti,demo"; };};源文件#include <linux/kernel.h>#include <linux/module.h>#include <linux/init.h>#include <linux/fil...原创 2019-03-27 09:46:50 · 570 阅读 · 0 评论 -
ubuntu下安装嵌入式开发常用工具或库
嵌入式linux开发需要一台linux PC,如ubuntu,centOS等。同时需要安装一些工具和库,方便开发和交叉编译开源库。1)ssh:sudo apt-get install openssh-server2)samba:sudo apt install samba假设Ubuntu的用户为default,设置为免密码,则a). vim /etc/samba/smb.conf 在...原创 2018-07-25 22:54:15 · 1991 阅读 · 0 评论 -
嵌入式linux CPU过高排查方法汇集
1,主要是使用top命令,可看出哪个进程CPU占有率过高,但嵌入式linux的top是由busybox编译出来的,属于轻量级。PC上有的功能,嵌入式平台上可能没有,譬如“top -H”等。2,另外ps命令可以看到各个进程的pid,包括内核线程,内核线程看起来更像用户态的进程3,知道哪个进程占用过高后,可试着在用户态上动态修改进程的优先级,如:renice -19 383,其中-19是新的n...原创 2018-07-04 00:14:26 · 3611 阅读 · 0 评论 -
usb gadget 端点halt的产生
发现某些U盘不是所有的scsi指令集都支持,对于不支持的指令,U盘会产生一个端点halt(stall),usb host会clean halt标志。譬如如下的ReadFormatCapacity指令gadget要主动产生stall的话可调用gadget.h里面的接口:static inline int gadget_is_stall_supported(struct usb_gadget *g){...原创 2018-04-12 11:13:10 · 979 阅读 · 0 评论 -
内核oops分析(使用gdb)
1,在相应的子目录里的Makefile里增加一句。EXTRA_CFLAGS +=-g此这个目录里的.o文件会带有调试信息,以便定位到C代码。2,假设出来编译出来usb_test.ko则arm-linux-gnueabihf-gdb usb_test.o进行调试。3,若在opps中出现xxxx_fun+0x120等字样,可在gdb下运行 “l”指令,如:(gdb) l *xxx...原创 2018-04-03 12:13:19 · 1023 阅读 · 0 评论 -
qemu模拟arm运行linux,挂载nfs
挂载nfs,方便调试pc:打开两个终端,其中一个输入如下命令,打开qemuqemu-system-arm -M vexpress-a9 -smp 4 -m 256M -kernel arch/arm/boot/zImage -append "rdinit=/linuxrc console=ttyAMA0 loglevel=8" -dtb arch/arm/boot/dts/vexpress-v2p...原创 2018-02-16 12:13:51 · 1239 阅读 · 0 评论 -
Linux网络设备驱动 _驱动模型
Linux素来以其强大的网络功能著名,同时, 网络设备也作为三大设备之一, 成为Linux驱动学习中必不可少的设备类型, 此外, 由于历史原因, Linux并没有强制对网络设备贯彻其"一切皆文件"的思想, 网络设备不以/dev下的设备文件为接口,用户程序通过socket作为访问硬件的接口。本文以Linux3.14.0内核为例, 讨论Linux中的网络驱动模型 Linux的网络设备并不使用文件作为用转载 2017-10-20 10:57:47 · 629 阅读 · 0 评论 -
linux gpio操作注意事项
使用/sys/class/gpio进行用户空间操作gpio应注意一些问题:1.echo "out" > direction时默认输出低电平,要想在输入该命令后输出高电平,可以使用“ echo "high" > direction”等等另外,在用户态也能实现gpio的“中断”:下面是示例://导出gpiosprintf(strCmd,"echo %d > ...原创 2017-05-14 19:53:49 · 632 阅读 · 0 评论 -
tcpdump交叉编译方法
本文档描述源代码版本为最新的:libpcap-1.8.1以及tcpdump-4.9.0原创 2017-03-19 23:33:17 · 1291 阅读 · 0 评论 -
mount.nfs: an incorrect mount option was specified
mount -t nfs -o nolock 10.200.1.1:/rootfs /mnt/nfs mount.nfs: an incorrect mount option was specifiedSolution:# mount -t nfs -o nolock,nfsvers=3,vers=3 10.200.1.1:/rootfs /mnt/nfs转载自:http://转载 2016-12-28 09:21:28 · 5284 阅读 · 1 评论 -
Qt下载地址
上Qt官网http://www.qt.io/download/想下载Qt,速度很慢,在这里记录下在Qt官网看到的镜像下载地址:1. 所有Qt版本下载地址:http://download.qt.io/archive/qt/2. 所有Qt Creator下载地址:http://download.qt.io/archive/qtcreator/3. 所有Qt转载 2016-12-22 23:05:24 · 909 阅读 · 0 评论 -
交叉编译mtd-utils到sama5d3x
材料:https://sourceforge.net/projects/libuuid/?source=typ_redirecthttp://git.infradead.org/mtd-utils.git/shortlog/refs/tags/v1.5.2http://www.zlib.net/http://www.oberhumer.com/opensource/lz原创 2016-10-25 00:00:45 · 2325 阅读 · 0 评论 -
uboot-2015.01 bootargs参数传递过程
image_setup_linux->image_setup_libfdt->fdt_chosen->getenv("bootargs")->fdt_setprop原创 2016-10-10 10:48:19 · 1291 阅读 · 0 评论 -
uboot 2016 从 do_bootm 说起
http://www.cnblogs.com/awsqsh/articles/5558375.htmlbelow describes u-boot do_bootm flow:do_bootm ->do_bootm_states ->bootm_start /bootm_find_os /bootm_find_other ->bootm转载 2016-10-10 00:38:33 · 1179 阅读 · 0 评论 -
让sama5d3_xplained支持从spi nor flash启动文件系统
sama5d3_xplained 板支持spi nor flash 启动文件系统原创 2016-09-26 20:32:06 · 2357 阅读 · 1 评论 -
USB Gadget Storage功能调试
mark一下:http://blog.csdn.net/yimiyangguang1314/article/details/42744123由于工作的需要,实现板卡通过Micro USB线与PC连接,作为PC的 外设存储,PC拷贝数据到板卡中,或者把板卡中的数据通过USB线拷贝到PC端,实现数据的交互,板卡采用Linux操作系统,笔者采用的是AM335X 处理器平台:开发过转载 2016-09-15 13:30:53 · 3832 阅读 · 1 评论 -
linux 2.6下eeprom at24c08 i2c设备驱动(new style probe方式)
1 修改bsp_以便支持probe1.1 AT24C08地址的确定 原理图上将A2、A1、A0都接地了,所以地址是0x50。注意到是7位(bit).1.2 修改bsp采用友善之臂的, 2.6.32.2内核[root@localhost mach-s3c2440]# vim /opt/FriendlyARM/mini2440/l转载 2016-09-05 23:46:29 · 2194 阅读 · 0 评论 -
Linux I2C(一)之常用的几种实例化(i2c_client )
前言:因为工作是音频驱动,所以经常涉及到I2C、I2S等常用的总线,想将I2C相关的东西总结一下,让自己更加了解I2C。基于:Linux3.10方式一:使用arch/arm/mach-s3c24xx/mach-mini2440.c举例:static struct i2c_board_info mini2440_i2c_devs[] __initdata =转载 2016-09-05 19:02:33 · 3149 阅读 · 0 评论 -
SAM-BA连接不上
AT91SAM9260与SAM-BA的连接是由于芯片内有一段固化的代码运行起来后才会检测到目标板并建立连接。假设现在你烧写了Bootstrap进去,芯片上电后发现有可运行的代码,从而就不执行片内固化的那个代码。因此,就无法与SAM-BA建立连接。解决方法主要有以下几个方面:1.在开发板上已经预留了处理这个问题的硬件,即有个按钮,一旦这个按钮按下,测清除flash中的所有代码,以转载 2016-08-31 00:10:34 · 3926 阅读 · 0 评论 -
常见的Linux内核中内存分配
1. 原理说明Linux内核中采用了一种同时适用于32位和64位系统的内存分页模型,对于32位系统来说,两级页表足够用了,而在x86_64系统中,用到了四级页表,如图2-1所示。四级页表分别为:l 页全局目录(Page Global Directory)l 页上级目录(Page Upper Directory)l 页中间目录转载 2016-08-05 17:12:22 · 337 阅读 · 0 评论 -
Linux 下smi/mdio总线通信
Linux 下smi/mdio总线通信韩大卫@吉林师范大学下面代码描述了在用户层访问smi/mdio总线, 读写phy芯片寄存器的通用代码。Linux内核2.6以上通用。将下面代码编译后,将可执行文件a.out 重命名为mdiomdio eth0 1 读取phy寄存器1的数值mdio eth0 0 0x1120 将0x1120写入 phy寄存器1eth0 为mac层转载 2016-08-02 23:51:12 · 1543 阅读 · 0 评论 -
开发板挂载NFS时传输大文件会断开,不能再进入NFS目录
传输大文件时需要添加参数,如: mount -t nfs -o intr,nolock,rsize=1024,wsize=1024 192.168.0.188:/home/default/work/my_root /mnt参考文章1:http://blog.csdn.net/ggbondg/article/details/4091934参考文章2:http://blog.sina.com原创 2016-01-10 15:01:23 · 1788 阅读 · 0 评论 -
busybox 显示用户名及路径 -----[\u@\h\W]\# busybox 在制作根文件系统的处理方法
不管是在移植根文件系统还是移植内核的时候我们总是希望可以添加一些独一无二属于自己的东西,比如自己的名字或者代号。 现在我们经常会用busybox生成根文件系统,可是根文件系统起来以后命令行提示符只有一个“#”号,没有像linux发行版那样是[user@hostname currentpath] #,那么我们这里就说说如何让我们的根文件系统按这个方式显示。 首先要介绍转载 2015-12-05 18:51:21 · 1612 阅读 · 0 评论 -
使用BusyBox制作嵌入式Linux根文件系统
STEP 1:构建目录结构 创建根文件系统目录,主要包括以下目录/dev /etc /lib /usr /var /proc /tmp /home /root /mnt /bin /sbin /sys #mkdir /home/rootfs#cd /home/rootfs#mkdir dev etc lib usr var转载 2015-12-05 17:50:33 · 406 阅读 · 0 评论 -
利用mmap()操作硬件寄存器
树莓派的gpio原创 2015-02-12 10:47:03 · 2933 阅读 · 0 评论 -
扩充BusyBox,追加Applet的方法
缺省情况下,BusyBox是对桌面linux的一个简化,如果要定制比较特殊的功能,比如像操作文件系统一样操作Flash存储器,那么就需要预先定制BusyBox的Applet。这一次,我们就介绍一下为BusyBox追加功能(Applet)的方法。窥探BusyBox的源代码如果要添加Applet,首先必须了解BusyBox的源代码结构。在BusyBox的魅力一文中,我们已经转载 2014-12-31 14:54:28 · 751 阅读 · 0 评论 -
利用BusyBox ~私人定制 My LINUX~
前言 我在今天在这里跟大家详细地探讨一下Linux系统的定制过程和实现例如、用户能够远程登录;和Nginx能够稳定地运行在我们私人定制的LINUX系统上、一步一步从头开始定制属于我们自己的系统。正文 首先我们先来简单的介绍一下我们这里定制属于自己的Linux系统的基本元素. 一个定制的linux内核+一个定制的busybox就可以定制一个小型的Linux操作系统了,安装D转载 2014-12-12 16:55:22 · 642 阅读 · 0 评论 -
如何学习linux设备驱动
作者:于老师,华清远见嵌入式学院讲师。 Linux系统目前主要维护2.4和2.6两个内核版本,在http://www.kernel.org/ 网站上已经可以下载到最新的2.6内核linux-2.6.38.6,及最新的2.4内核linux-2.4.37.11。稳定版本号基本上是1~3月更新一次,如:2.6.35至2.6.36,升级版本号每1~2周更新一次,如:2.6.35.1至2.6.转载 2014-11-17 09:19:11 · 529 阅读 · 0 评论