Linux应用开发
文章平均质量分 63
主要介绍Linux应用开发中的main函数、动态库、应用编程等;
嵌入式er.
不积跬步无以至千里,不积小流无以成江海
展开
-
在线的调试器pythontutor,支持C/C++
对于C语言的学习最复杂的可能无疑就是指针的,指针因其灵活、晦涩难懂等特点而出名,本文并不介绍利用gdb的角度去分析它,而是通过一个在线网站而分析;原创 2024-05-02 18:13:13 · 151 阅读 · 0 评论 -
线程的运行状态
我们可以通过top指令查看进程的运行状态,里面可以看到进程或者线程的运行状态,其中R代表线程运行,S为可中断的空闲态,其他依次按照字符串对比。原创 2023-04-25 22:36:19 · 517 阅读 · 0 评论 -
嵌入式学习之路
作为一个嵌入式er,主要的学习之路在于软件。因此需要打通1.uboot启动,如何启动内核,uboot移植等;2.kernel内核启动,需要学习内核的进程调度、文件系统、内存管理、驱动环境、协议栈、设备树等内容;3.根文件系统,嵌入式一般使用busybox制作根文件系统,以及最终启动用户的APP应用程序4.arm的基本知识,主要包括arm的AMBA总线、GIC中断、MMU、Cache指令集等内容。5.基于arm内核的芯片常用外设:iic spi uart pcie gpio sgmii/原创 2023-04-25 21:53:56 · 458 阅读 · 0 评论 -
C语言的__attribute__机制
_attribute__声明函数属性可以使用__attribute__来声明函数的属性,这些属性可以帮助编译器优化调用或更仔细地检查代码的正确性。例如,属性(noreturn)用来指定函数从不返回。函数属性声明由__attribute__关键字引入,函数后跟一个用双括号括起来的属性说明。你可以在声明中指定多个属性,方法是在双括号里面用逗号将各个声明分开。原创 2023-05-05 19:06:29 · 250 阅读 · 1 评论 -
内存问题理论基础
关于c、c++语言,内存最终是绕不过的难点和重点,没有对内存进行掌握,那么就不能认为熟悉了对应的语言。原创 2023-03-29 22:43:51 · 325 阅读 · 0 评论 -
利用QEMU模拟启动uboot 内核 busybox
文章目录1.QEMU是什么2.安装QEMU2.1源码安装2.2联网安装2.3安装交叉编译链3.Linux内核kernel3.1内核编译4.Linux根文件系统busybox4.1 编译busybox4.2 制作根文件系统4.3修改根文件系统增加欢迎界面5.bootloader启动5.1介绍5.2编译u-boot5.3配置网络相关5.3.1配置tftp5.4通过uboot启动内核5.5效果展示参考视频: https://b23.tv/25kQaZc环境配置:实体机:Windows7虚拟机:Linux原创 2022-11-27 21:31:21 · 2416 阅读 · 0 评论 -
busybox之init_main源码分析
busybox是一个轻量级的Linux工具箱,其中包含了一些基本的UNIX工具。init_main是busybox中的一个重要函数,其作用是启动系统初始化,包括初始化系统进程、挂载文件系统、执行rc脚本等。原创 2023-04-07 21:39:08 · 262 阅读 · 0 评论 -
busybox源码介绍
busybox版本:busybox-1.35.0.tar.bz2tar -xvf busybox-1.35.0.tar.bz2原创 2022-11-20 10:03:31 · 741 阅读 · 0 评论 -
交叉编译gdb源码
GDB 全称“GNU symbolic debugger”,诞生于 GNU 计划(同时诞生的还有 GCC、Emacs 等),是 Linux 下常用的程序调试器。发展至今,GDB 已经迭代了诸多个版本,当下的 GDB 支持调试多种编程语言编写的程序,包括 C、C++、Go、Objective-C、OpenCL、Ada 等。实际场景中,GDB 更常用来调试 C 和 C++ 程序。原创 2022-10-06 23:09:19 · 2389 阅读 · 0 评论 -
c语言变长数组与数组越界保护
在c99协议标准中,增加了变长数组(VLA)这一特性,本文旨在从汇编的角度来理解其原理,并且简单阐述下数组越界保护的内容。在此顺带说一下自己对c语言学习的理解,关于常规的表达式、语法等不做阐述,主要对一些复杂的关键字或者特性的学习方式作以自己的感悟。如:c语言中对const、static、变长数组等的学习。1.通过尝试式学习,即通过代码实现进行尝试说明。2.通过的内存段工具binutils,可以通过工具查看分析代码的段、符号、汇编等。.........原创 2022-08-04 08:23:57 · 1155 阅读 · 1 评论 -
ARM交叉编译
编译与执行,编译与执行必须在同一个平台才可以进行正确的执行,我们常见的硬件平台为X86、ARM、MIPS等,一般我们将嵌入式设备称为目标机,我们自己的电脑称为宿主机,这里就涉及一个问题,目标机(一般为ARM)与宿主机(一般为x86)的硬件平台是不同的,因此涉及到在宿主机上编译目标机上可执行的程序,这就涉及到交叉编译,即在宿主机上编译,在目标机上执行。为何需要交叉编译,在目标机上编译执行不可以吗,当然可以,只不过对于嵌入式设备,一般为基于arm的嵌入式设备,但是嵌入式设备的资源较少,ram与flash等资源原创 2022-06-15 21:03:54 · 2137 阅读 · 0 评论 -
main函数是如何被调用的
首先我们的问题是,linux用户编程下main函数是第一个被执行的函数吗?先给出结论,不是的,不是的,第一个不是main函数。简单的main函数其实很复杂,我们只是站巨人的肩上(这个巨人就是内核、glibc、系统调用)。1.背景介绍在linux下进行c语言编程,我们首先明确几个概念,c语言、编译链、标准c库、应用程序、linux内核几个的关系。1.1.c语言做了什么?规定了c语言的语法,如关键字、运算符、表达式和函数等,它本身并不提供任何库函数供用户使用。1.2.什么是c语言标准库,c标准库、原创 2022-06-07 17:43:59 · 2241 阅读 · 0 评论 -
Linux静态库与动态库
gcc完成编译需要四部:预处理、编译、汇编、链接。在linux中静态库一般为.a文件动态库为.so文件。原创 2022-05-14 23:16:58 · 569 阅读 · 0 评论