项目遇到一个问题,就是程序在Ubuntu下运行的时候是正常的,至少大部分时候运行是正常的,但是移到开发板上,就会出现段错误。这时候突然想到了GDB,从来都没有接触过调试工具,以前的调试都是使用printf直接打印的方式!!!效率极低!准备鸟枪换炮!!!
AMD MPSoC Linux一般使用PetaLinux编译Linux系统,包括Linux内核、DTS、文件系统。
Linux linuxidc 4.4.0-89-generic #112-Ubuntu SMP Mon Jul 31 19:38:41 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
摘要总结:本文主要分析了Linux系统中printk()的输出流程、以及如何使用printk()来调试驱动程序。首先介绍了printk()的作用和输出格式,然后分析了Linux系统中printk()的输出流程,最后通过实例详细讲解了如何使用printk()来调试驱动程序。
如果需要全局调整打印级别,我们可以调用Set_Log_Lever的接口,实现打印级别的适时调整。
学会了输出,那么输出什么呢?当然是人类让计算机运算的数据,那么运算的数据来自哪里?
我们就继续以此为基础,用保姆级的粒度一步一步操作,来讨论一下字符设备驱动程序的编写方法。
/proc/kallsyms会显示内核中所有的符号,但是这些符号不是都能被其他模块引用的(绝大多数都不能),能被导出的是符号的类型是大写的那些(例如T,U)。
请先按照调试工具安装、Linux开发环境搭建相关文档,安装SecureCRT串口调试终端、VMware虚拟机等相关软件,按照Linux系统使用手册解压安装LinuxSDK开发包到Ubuntu。无特殊说明情况下,默认使用USB TO UART0作为调试串口,使用Linux系统启动卡(Micro SD方式)启动系统,通过路由器与PC机进行网络连接。
Windows 开发环境: Windows 7 64bit 、Windows 10 64bit
身为一个Java开发人员,这些常用的Linux命令必须掌握。即使平时开发过程中没有使用Linux(Unix)或者mac系统,也需要熟练掌握Linux命令。因为很多服务器上都是Linux系统。所以,要和服务器机器交互,就要通过shell命令、身为服务器后端经验丰富的老鸟或者大神、这些都是必备的基本技能。
在大多数的Linux和Unix系统、及其他类Unix系统中,Shell是用户与操作系统内核交互的主要方式。作为一种强大的命令行解释器,它也支持编程功能,用户可以写脚本来处理各种任务。
本指导文档适用的开发环境为Windows 7 64bit和Windows 10 64bit。本文档主要提供开发板FPGA端案例测试方法,所有工程均位于产品资料Demo1目录下。进行本文档操作前,请先按照调试工具安装相关文档安装USB转串口驱动、SecureCRT串口调试终端、ISE 14.7等相关软件。默认使用FPGA RS232作为调试串口,并使用TL-DLC10下载器进行操作演示。
本指导文档适用的开发环境为Windows 7 64bit和Windows 10 64bit。本文档主要提供开发板FPGA端案例测试方法,所有工程均位于产品资料Demo1目录下。文章内容包括有LED测试、按键测试、UART回环测试、模块采集测试、AD采集三核通信案例测试、采集抽样FFT显示等,欢迎相关用户查看分享。
在上一篇文章中Linux驱动实践:你知道【字符设备驱动程序】的两种写法吗?我们说过:字符设备的驱动程序,有两套不同的API函数,并且在文中详细演示了利用旧的API函数来编写驱动程序。
就像微信的朋友圈一样,好友太多,各种微商信息、心灵鸡汤、养生谣言充斥,早已掩盖了最初的社交初衷。
大家好,我是道哥,今天我为大伙儿解说的技术知识点是:【驱动层中,如何发送信号给应用程序】。
在前几篇文章中,我们一块讨论了:在 Linux 系统中,编写字符设备驱动程序的基本框架,主要是从代码流程和 API 函数这两方面触发。
在上一篇文章中介绍了内核加载的方式使用kprobe的方法,现在介绍一下使用debugfs接口使用kprobe的方法。
摘要:本案例主要分析网络设备OLT被(IPV6) MLD报文攻击导致用户ONU大面积掉注册的故障现象。OLT(Optical Line Terminal)设备是互联网中常用的宽带用户接入(光电一体)网络设备,它不仅具备L2交换机或L3路由交换机功能,还具备对用户端设备ONU的控制、管理等功能。某OLT在没有任何网络拓扑变化且正常使用多年的情况下,某日突然出现大面积的用户ONU掉注册故障。掉注册的ONU不限于一个PON口、一块业务盘,而是整台OLT下所有的用户ONU随机大面积掉注册,大量断纤告警涌现。通过排查分析,确定是上层转发流入大量垃圾报文MLD攻击导致的网络安全故障。
很多时候,我们要监控系统状态,即监控系统cpu负载、进程状态等情况,如果我们在 Linux 应用层,我们有很多方式,命令行中常用 top、ps 命令,代码中,我们可以使用 popen 函数去执行一个 top 命令,获取返回值。或者我们直接读写 /proc下面的文件,都可以达到目的。
本文并不会对所有命令进行详细讲解,只给出常见用法和解释。具体用法可以使用--help查看帮助或者直接通过google搜索学习。
JVM大家可能都知道是个什么玩意-Java虚拟机,但是到底是个什么鬼?相信即使工作3-5年的程序员可能也不大了解。 如题所述,今天与大家分享的是如何分析JVM的线程堆栈以及如何从堆栈信息中找出问题。
JVM大家可能都知道是个什么玩意-Java虚拟机,但是到底是个什么鬼?相信即使工作3-5年的程序员可能也不大了解。
一直以来主要使用Java语言进行编程,开始学习Python起源于2012年亚马逊双十一购书大优惠的活动中为了补齐优惠额度,正好亚马逊给推荐《Python入门基础》一书。
本案例主要分析终端设备ONU通过某端口被植入恶意程序,导致上网感知慢、测速不达标、被强推广告等的异常上网现象。通过网络报文和设备log打印信息帮助定位故障是目前ONU排查问题的重要手段。通过log可以发现设备的运行情况以及进程是否正常,通过网络报文可以判断网络协议是否运行正常,是否有异常流量。本例中就是通过log打印信息看出ONU被植入恶意程序,从而发现ONU CPU被占用导致无法进行硬件加速,从而出现测速不达标以及网速慢等现象。
本篇文章主要讲解嵌入式板卡中Linux系统是如何正确测试、使用的,其中内容包含有U-Boot编译、U-Boot命令和环境变量说明、Linux内核编译、xtra驱动编译、系统信息查询、程序开机自启动说明、NFS使用说明、TFTP使用说明、TFTP + NFS的系统启动测试说明、inux设备驱动说明等,其中案例源码部分公开。
一些嵌入式设备,一般都会留有调试串口,经由RS232/485标准与PC的COM口相连,将打印输出在PC上显示,并可以接收PC端的输入,如下图所示:
使用crontab你可以在指定的时间执行一个shell脚本或者一系列Linux命令。例如系统管理员安排一个备份任务使其每天都运行
如今我们构建了整个互联网后端架构,跨语言通信需求非常多,比如原有的系统是用Java开发的,但是在一些非常适合Node.js发挥场景的地方又要使用Node.js来开发,而两者之间的通信方法也有多种,目前跨语言最流行和轻量级的通信方式就是用HTTP的RESTful,也可以选择性能更好的Thrift。
在Linux中, 标准输入 是标准输入流,这接受文本作为其输入,我们看到的stdin就是标准输入流之意(也称为输入重定向)。从命令到shell的文本输出是通过 标准输出 (标准输出)流,stdout就是标准输出流之意(也称为输出重定向),来自命令的错误消息通过发送 标准错误 (标准错误)流,比如stderr就是标准错误流之意(也称为错误重定向)。
周末的时候,有位读者疑惑为什么 Linux man 手册中关于 netstat 命令中的 tcp listen 状态下的 Recv-Q 和 Send-Q 这两个信息的描述跟我的图解网络写的不一样?
GDB是在Linux命令行下对C/C++的程序进行调试常用的一个命令, 现将平时记录在本子上的笔记整理记录一下.
在日常的 Linux 系统管理和自动化任务处理中,经常会遇到需要自动登录到服务器并执行一系列命令的情况,例如批量部署更新、监控日志等。手动操作不仅耗时耗力,而且效率低下,特别是当涉及到多台服务器时。
awk 是 Linux 三板斧之一,是一种强大的文本解析和处理语言。它可以对文本文件进行复杂的模式匹配、条件测试、循环与算术运算等。awk 的基本语法是:
当我们使用 procd init 脚本让某个应用程序实现开机自启时,会发现应用程序中原本通过 printf/fprintf 等输出到 stdout/stderr 的打印信息都无法从串口或 adb shell 中看到了。
单片机一般使用Jlink通过SWD或者JTAG接口直接在IDE中在线调试,Linux应用程序通常是加printf输出log去调试,这种方式简单,但是有些隐藏的程序bug只通过加打印信息不那么容易定位,这时可以通过类似单片机调试的gdb调试来实现,本篇为大家介绍linux环境下在线调试环境的搭建,希望对大家有所帮助。
随着ARM处理器性能不断增强,当前越来越多产品都倾向尽量用单一架构的高性能ARM平台来满足产品的不同功能要求。但是,在工业应用领域还是要面对一些实时控制和通讯的要求,单一系统架构无法完全满足。面对复杂的工业应用场景,创龙科技推出了基于NXP i.MX 8M Mini设计的工业核心板和评估板,提供了四核Cortex-A53 + 单核Cortex-M4异构多核的组合使用方法,使Cortex-M4发挥出MCU实时控制性的特性,从而满足复杂的工业应用场景。
作为一个开发或测试人员,有些常用的Linux命令必须掌握。即时平时开发过程中不使用Linux(Unix)或者mac系统,也需要熟练掌握Linux命令。因为很多服务器上都是Linux系统。所以,要和服务器机器交互,就要通过shell命令。
前言 目前的主流服务器一般是二路,即有2个NUMA node。每个NUMA上有一个CPU。比较主流的CPU一般是10Core/12Core,打开了Hyper-thread的场景下,就是2 Sockets × 10/12 Cores/socket × 2 Hyper-threads/Core,也就是40核或者48核。 对于大规格的虚拟机,尤其是32 vCPU或者40vCPU的场景下,对于计算密集型的业务,需要把物理机的CPU拓扑信息正确的透传到虚拟机中,否则跨Socket的内存访问,同一个Core下的两个Hyper-thread的资源的争抢,都是影响性能的关键因素。 分析 Host上拓扑关系 我们一般会用lscpu命令看到基本的CPU拓扑信息,也可以通过cat /proc/cpuinfo的方式看到“physical id”,“core id” cpuid 再进一步探讨,Host kernle是怎么获取到的CPU的拓扑关系的呢? Linux有命令cpuid,代码在https://github.com/tycho/cpuid cpuid命令的结果截取如下:
作为一个Java开发人员,有些常用的Linux命令必须掌握。即时平时开发过程中不使用Linux(Unix)或者mac系统,也需要熟练掌握Linux命令。因为很多服务器上都是Linux系统。所以,要和服
2.goroutine是一种函数的并发执行方式,而channel是用来在goroutine之间进行参数传递
要部署一个网站,主页空间不是云主机,只有Apache,即只支持静态Html或Php。服务上,Node或Spring boot是不能用了,So sad,只好找回老工具Php,顺便安装Composer并记录下。
在Windows中我们经常可能会复制一个文件,然后粘贴到另一个地方。那在Linux也可以对文件或者目录进行复制,对应的命令就是cp,那怎么用呢?
传统的计划任务是使用linux的crontab,每次对计划任务进行修改都要上服务器处理,不方便且不安全。laravel的命令调度器允许我们通过简单的配置即可实现计划任务功能。
守护进程(Daemon)也称为精灵进程,是运行在后台的一种特殊进程,它独立于控制终端并且周期性地执行某种任务或等待处理某些事情的发生,主要表现为以下两个特点:
通过之前一系列的文章,相信各位小伙伴应该已经对vim产生了浓厚的兴趣,可能不少小伙伴通过慢慢的使用变的跟我一样,离开vim就不会写代码了。如果你希望继续长时间使用vim,甚至将vim作为主要的代码编辑器,那么花一定的时间来学习vim的配置是很有用的。如果你只是因为 linux 平台默认安装了 vi/vim ,平时又主要用它改改匹配文件,临时用用,那么还是赶紧退出这个文章,免得耽误时间吧。
作者: 付汉杰 hankf@xilinx.com hankf@amd.com 测试环境: Vivado/PetaLinux 2021.2, Linux 5.10.0
CentOS 7 之前,使用 service 命令来管理服务,7 之后使用 systemctl 命令来管理服务。 软件包安装的服务单元存储在 /usr/lib/systemd/system/
资料中,难免会有一些错误,有任何问题,都可以在github向我提交issue。文中的勘误,我都会更新在github中。点击阅读原文可以直达github。
领取专属 10元无门槛券
手把手带您无忧上云