这不,一个由字节对齐导致的挂死问题就出来了。...字节对齐和64位 关于字节对齐,可参考《理一理字节对齐的那些事》,而之前也分享过另一个切64位之后出现的问题,有兴趣的可以查看《记64位地址截断引发的挂死问题》。...本文背景 本文出现的场景是,系统需要解析JSON文件,但是出现部分功能解析正常,部分挂死,并且32位程序正常,而64位程序挂死。鉴于原系统比较复杂,本文将会简化其过程,来看看到底是什么导致了挂死。...最终也就出现了我们遇到的情况,64位程序由于库中申请结构体内存大小与外部调用不一样,最终导致挂死,而32位程序解析JSON正常。
来源:公众号【编程珠玑】 作者:守望先生 ID:shouwangxiansheng 解引用NULL指针为什么会出错,导致程序挂死?或者说访问内存地址为0的位置为什么会视为非法?...程序空间地址 内核空间:大小与操作系统有关,对于Linux系统,32位程序的内核空间默认为1G(可调整)。 栈:Linux下默认为8M,可调整。具有自动存储期的变量存储在栈中。...关注公众号【编程珠玑】,获取更多Linux/C/C++/数据结构与算法/计算机基础/工具等原创技术文章。后台免费获取经典电子书和视频资源
部署站点后通常首先会生成该站点所有文件的MD5值,如果上线后网站页面内容被篡改(如挂马)等,可以比对之前生成MD5值快速查找去那些文件被更改,为了使系统管理员第一时间发现,可结合crontab或nagios
前言 最近要将整个项目的代码从原先的只支持32位变成同时支持32位和64位,这个过程中遇到一个很不容易定位的挂死问题,花了不少时间才定位解决,因此分享给大家。...问题现象:向服务器发送一条操作指令后直接挂死 分析解决过程简化为如下步骤: 查看日志以及coredump信息,初步定位挂死的位置 发现挂死在停止定时器的位置 32位程序正常,而64位异常,因此和32位与...最终可以确定,在调用动态库接口时,虽然返回的是8字节地址,但是赋给外部变量时,就被截断了 换项目中的另外一个进程调试demo发现,编译时出现错误,提示函数没有声明 于是加上声明之后编译通过,但并没有出现挂死的问题...总结 由于对出现问题的程序代码不熟悉,加上其编译工程充斥着大量的警告而没有处理,以及涉及动态库,导致这个引起挂死问题的罪魁祸首没有提前暴露处出来。...在头文件中声明函数,并提供给调用者 函数使用前进行声明 问题长期定位不出来时,休息一下 尽量编写通用性代码 非必要时不强转 使用void *指针格外小心 思考 为什么32位的时候运行正常,而64位程序会挂死
/* * uart 打开分析 * * 问题: 当应用程序调用open系统调用函数,那么是如何open串口的?
虽然以太网接口和USB接口也是以一个串行流进行数据传送的,但是串口连接通常特指那些与RS-232标准兼容的硬件或者调制解调器的接口。废话少讲,今天来解剖使用串口时的编程代码细节。...上面的代码是使用串口的第一步,来解释下都是啥意思。...来瞧瞧: 第21-22行,定义了一个用来配置串口属性的结构体: struct termios serial; bzero(&serial, sizeof(serial)); 第24行,将串口设置为raw...cfsetispeed(&serial, B9600); cfsetospeed(&serial, B9600); 第28-32行,设置串口控制属性(c_cflag),其中: serial.c_cflag...: tcsetattr(fd,TCSANOW,&serial); 当然,上面的 fd 就是系统中的某一个你想要设置的成上面那样的属性参数的串口,比如就拿粤嵌GEC210开发板来说,他有四个串口,其中第一个就已经被用于终端控制了
qemu提供了控制台console和串口serial用来与虚拟机进行交互通讯。本文讲述如何通过console进入虚拟机的控制台,以及如何通过serial与虚拟机进行串口通讯。...virtio类型的console设备后,在虚拟机内部对应设备文件/dev/hvc* 给虚拟机天机了serial类型的serial设备后,在虚拟机内部对应设备文件/dev/ttyS* 在主机上进入虚拟机的控制台...*要进入虚拟机的控制台只能通过console设备,不能通过serial设备(可以通过serial0,因为serial0也是一个console设备) *要通过virtio类型的console进入虚拟机的console...,不需要对虚拟机做任何修改,要通过serial类型的console进入虚拟机的console,需要在虚拟机的cmdline中添加console=ttyS0 串口在主机上的重定向 虚拟机的串口在主机端可以实现重定向功能...以重定向到PseudoTTY的方式演示串口通讯: 给虚拟机添加一个pty类型的串口(第一个pty串口默认给console使用,这里用第二个串口)
最近在了解嵌入式方面的知识,就随笔记录一下: 查看Linux本机串口: 1、查看串口是否可用 可以对串口发送数据比如对com1口,echo /dev/ttyS0 2、查看串口名称使用 ls...-l /dev/ttyS* 一般情况下串口的名称全部在dev下面,如果你没有外插串口卡的话默认是dev下的ttyS*,一般ttyS0对应com1,ttyS1对应com2,当然也不一定是必然的; 3、...查看串口驱动 cat/proc/tty/drivers/serial 4、查看串口设备 dmesg | grep ttyS* 5、查一下板子上的串口有没有设备 grep tty/proc.../dev下应该有一个USB串口:/dev/ttyUSB0. 当一个串行卡或数据卡被侦测到时,它会被指定成为第一个可用的串行设备。...PC上的串口一般是ttyS,板子上Linux的串口一般叫做ttySAC; 串口使用: 如果需要查看这个串口设备输出: cat ttyUSB0 如果需要对这个设备输入: echo yaoxu > ttyUSB0
/*和read的分析过程一样, 我们首先分析tty_write*/ /*最重要的就是do_tty_write函数。 前面都是一些合法性判断*/ static ...
/*串口read函数分析 * 当应用程序调用read系统调用时,会调用tty_fops中的tty_read * 接下来分析tty_read函数 * * 其中最重要的就是ld->ops->read(tty...* 那么当我们的串口有数据的话,当然就调用我们以前注册的rx中断函数了。...unsigned int ufcon, ch, flag, ufstat, uerstat; int max_count = 64; while (max_count-- > 0) { /*读取UFCON串口配置寄存器...*/ ufcon = rd_regl(port, S3C2410_UFCON); /*读取 UFSTAT串口状态寄存器。...UERSTAT_OVERRUN, ch, flag); } /*这是才将整个数据送tty->read_buf中去*/ tty_flip_buffer_push(tty); } /* 将串口产生的数据送进
查看Linux本机串口: 1、查看串口是否可用 如果需要查看这个串口设备输出: cat ttyUSB0 如果需要对这个设备输入: echo yaoxu > ttyUSB0 常用的调试工具有: minicom...cutecom Linux系统可视化串口应用软件,使用上与Windows系统串口调试工具。 picocom 效果上类似 minicom 的精简版,设置比较简单,还可以有背景颜色。...PC上的串口一般是ttyS,板子上Linux的串口一般叫做ttySAC; 串口权限问题 临时调试解决 在使用串口进行通信时,经常需要使用指令来赋予用户读写的权限 $ sudo chmod 777 /dev...查看linux所有用户 使用 /etc/passwd 文件 使用任何一个像 cat、more、less 等文件操作命令来打印 Linux 系统上创建的用户列表。.../etc/passwd 是一个文本文件,其中包含了登录 Linux 系统所必需的每个用户的信息。
简介 嵌入式Linux下串口编程与Linux系统下的编程没有什么区别,系统API都是一样的。...嵌入式设备中串口编程是很常用的,比如会对接一些传感器模块,这些模块大多是RS232或者RS485接口,对于软件层面上来说,RS232与RS48区别不大。...RS232与RS485在使用上的区别,RS232是全双工的,只能对接一个设备串口设备。RS485是半双工的总线协议,一般可以挂多个传感器设备,半双工的意思是同时只能有一个设备向串口发数据。...用到的API函数 函数 说明 open 打开设备,用于打开串口设备 fcntl 修改设备描述符属性参数 isatty 检测打开的描述符是否指向一个终端 tcgetattr 用来获取串口终端参数 cfmakeraw...将终端设置为原始模式,该模式下所有的输入数据以字节为单位被处理 tcflush 用于清空输入、输出缓冲区 tcsetattr 设置串口终端参数 read 读取数据 write 写数据 close 关闭串口设备
命令保存分区信息 image.png 三、格式化新分区 用mkfs命令为sdc1新分区进行格式化,格式化类型为ext4 image.png 格式化后,我们看到了sdc1这个分区,linux...image.png 四、手动挂载分区至linux目录中 与windows不同,在linux中任何内容都是文件,包括分区。... 2、手动挂载 [root@localhost disk]# mount /dev/sdc1 /home/disk 检查,挂载成功 image.png 五、为避免手动挂载后,重启linux
格式化后,我们看到了sdc1这个分区,linux自动为这个分区分配了uuid唯一标识符。注:记下这个标识符,接下来自动挂载有用。 ?...四、手动挂载分区至linux目录中 与windows不同,在linux中任何内容都是文件,包括分区。我们新建一个/home/disk的目录,并把sdc1这个分区挂载至这个目录下。...五、为避免手动挂载后,重启linux造成配置丢失,我们需要实现自动挂载 1、在/etc/fstab文件中,增加一条命令。
杰瑞包大好评啊,但是带来的后果就是挂卡挂不完了。然而手里的服务器全是linux环境的并不支持C#写的ASF,所以用mono f**k之。...以下参照上面的3步以后 PS:关于“最小化Screen”,因为开启了screen后就不能进行其他操作了,我们的服务器当然不只是为了挂卡而存在的,所以可以通过按住Ctrl+A+D“最小化”screen窗口...PPS:还有就是恢复的话,在终端里输入screen -r ASF就可以了 PPPS:如果不想挂卡了,就输入以下命令杀掉进程。
一、背景 一些嵌入式设备,一般都会留有调试串口,经由RS232/485标准与PC的COM口相连,将打印输出在PC上显示,并可以接收PC端的输入,如下图所示: ?...设备出厂部署后,不方便接调试串口,查看设备输出就变得比较困难,不利于问题定位。 如果设备具有联网能力,我们可以通过telnet或者ssh登录到设备上,进行远程调试。...二、原理 下图展示了Linux系统中标准输入/输出(STDIN/STDOUT)与控制终端的关系,其中ttyS0即串口: ?...如下图所示,重新绑定后,打印就可以直接输出到telnet或者ssh对应的控制台,经由网络传输到PC上;同时,也可以从PC上接收输入(如果应用程序监听了STDIN,PC上的输入就可以直接被应用程序读取到,...不过应用程序不能直接监听STDIN,因为默认只能收到串口终端上的输入,telnet/ssh终端上的输入它收不到。
/** * uart分析 * * 其实串口分析就两个重要的文件: S3c2440.c Samsung.c * * **/ /*1...其实每一个串口都对应一个uart_port结构 * 这里只初始化了tty_port结构。...KERN_ERR "s3c24xx_init_uarts: cpu has no uart init\n"); } else (cpu->init_uarts)(cfg, no); } /*初始化系统上的串口资源...用于初始化uart_port 3. s3c24xx_serial_ops: 硬件的操作集 4. s3c24xx_uart_info: 用于初始化uart_port 其实也就是:编写S3c2440.c这个串口文件
当我们启动用户进程时,如果进程是含有图形界面的程序,那么控制器会从控制台转移到用户进程,这时产生的一个副作用是,控制台的光标停止闪烁,即使点击键盘,键盘的按键信息也不会在控制台上出现,也就是说因为CPU...首先我们将开放一个命令叫start, 就像windows一样,在控制台中输入该命令,后面跟着要启动的程序名称,那么控制台就会启动相应程序,程序启动后,控制台还能继续接收命令,也就是控制台进程不应启动新进程而被锁死...从上图你或许能看出一些‘猫腻’,start 命令的本质是启动一个新的控制台进程,然后把start 后面的字符传给新的控制台,然后再把‘回车’信息传给控制台,这就好像用户在新的控制台中输入相应命令启动进程一样...当用户在控制台输入”start”命令时,控制台就会调用cmd_start函数来执行相应操作。...ncst 后面跟着hlt ,当控制台执行后,用户进程启动,并且不附带一个新的黑色控制台窗口,同时原控制台窗口并未锁死。
要感谢 Vlock(Virtual Console lock),这是一个命令行程序,用于锁定 Linux 控制台上的一个或多个会话。如有必要,你可以锁定整个控制台并完全禁用虚拟控制台切换功能。...Vlock 对于有多个用户访问控制台的共享 Linux 系统特别有用。 安装 Vlock 在基于 Arch 的系统上,Vlock 软件包被替换为默认预安装的 kpd 包,因此你无需为安装烦恼。...在 Debian、Ubuntu、Linux Mint 上,运行以下命令来安装 Vlock: $ sudo apt-get install vlock 在 Fedora 上: $ sudo dnf install...vlock 在 RHEL、CentOS 上: $ sudo yum install vlock 在 Linux 上锁定虚拟控制台会话 Vlock 的一般语法是: vlock [ -acnshv ] [...3、 在锁定所有控制台之前切换到新的虚拟控制台 在锁定所有控制台之前,还可以使 Vlock 从 X 会话切换到新的空虚拟控制台。为此,请使用 -n 标志。
msm_serial_hs_lite.c: 低速版本, 设备树内容配置为compatible = “qcom,msm-lsuart-v14”;
领取专属 10元无门槛券
手把手带您无忧上云