linux.asm
计算机语言有后缀名吗?常见的源码编程语言源文件后缀名
众所周知,编程语言源文件的源码后缀名可以帮助我们快速的判断其是哪种语言,从而选择合适的源码编译器,方便我们后期的源码学习和操作。
在介绍编程语言源文件后缀名之前,源码我们先把编程语言分个类:常见的源码树 炫酷源码分类为机器语言(由二进制码0和1构成)、汇编语言、源码高级语言三个。源码还可以将其分为编译语言(典型的源码有C、C++、源码Go、源码Swift、源码object-c以及汇编等)和解释性语言(Javascript、源码python、源码php、源码perl、Ruby等)以及混合性语言(Java和C#等)
机器语言
首先我们要明白,机器语言和后缀名没有必然联系;其次,机器语言一般不需要编译和解释,对一般的单片机或嵌入式CPU,机器语言的后缀名一般为.bin(直接的二进制文件)或.hex(进制文本),对操作系统来说,机器语言就是可执行文件,在windows系统中,典型的是.exe.dll.com.sys等,而在linux系统中机器语言一般没有后缀,因为在Linux中,带有扩展名的文件,只能代表程序的关联,并不能说明文件是可以执行,从这方面来说,Linux的机器语言扩展名没有太大的意义。
简述BootLoader的功能和启动过程?
作用原理
编辑
⒈BootLoader所支持的CPU和嵌入式板
每种不同的CPU体系结构都有不同的BootLoader。有些BootLoader也支持多种体系结构的CPU,比如U-Boot就同时支持ARM体系结构和MIPS体系结构。除了依赖于CPU的体系结构外,BootLoader实际上也依赖于具体的嵌入式板级设备的配置。这也就是说,对于两块不同的嵌入式板而言,即使它们是基于同一种CPU而构建的,要想让运行在一块板子上的BootLoader程序也能运行在另一块板子上,通常也都需要修改BootLoader的源程序。
⒉BootLoader的安装媒介(InstallationMedium)
系统加电或复位后,所有的CPU通常都从某个由CPU制造商预先安排的地址上取指令。比如,基于ARM7TDMIcore的CPU在复位时通常都从地址0x取它的第一条指令。而基于CPU构建的嵌入式系统通常都有某种类型的固态存储设备(比如:ROM、EEPROM或FLASH等)被映射到这个预先安排的地址上。因此在系统加电后,CPU将首先执行BootLoader程序。
⒊用来控制BootLoader的设备或机制
主机和目标机之间一般通过串口建立连接,BootLoader软件在执行时通常会通过串口来进行输入、输出,比如:输出打印信息到串口,从串口读取用户控制字符等。数据存储网站源码
⒋BootLoader的启动过程
BootLoader的启动过程可分为单阶段(Single-Stage)和多阶段(Multi-Stage)两种。通常多阶段的BootLoader具有更复杂的功能,更好的可移植性。从固态存储设备上启动的BootLoader大多采用两阶段,即启动过程可以分为stage1和stage2:stage1完成初始化硬件,为stage2准备内存空间,并将stage2复制到内存中,设置堆栈,然后跳转到stage2。
⒌BootLoader的操作模式(OperationMode)
大多数BootLoader都包含两种不同的操作模式。启动加载模式和下载模式。
(1)启动加载(Bootloading)模式:这种模式也称为“自主”模式,也即BootLoader从目标机上的某个固态存储设备上将操作系统加载到RAM中运行,整个过程并没有用户的介入。这种模式是BootLoader的正常工作模式。
(2)下载(Downloading)模式:在这种模式下目标机上的BootLoader将通过串口连接或网络连接等通信手段从主机下载文件。从主机下载的文件通常首先被BootLoader保存到目标机的RAM中然后再被BootLoader写到目标机上的固态存储设备中。
⒍BootLoader与主机之间进行文件传输所用的通信设备及协议
分为两种情况。一种是目标机使用串口与主机相连。这时的传输协议通常是xmodem/ymodem/zmodem中的一种。第二种可以用网络连接的方式传输文件,这时使用的协议多为tftp。
解析
编辑
网上关于Linux的BOOTLOADER文章不少了,但是大都是vivi,blob等比较庞大的程序,读起来不太方便,编译出的文件也比较大,而且更多的是面向开发用的引导代码,做成产品时还要裁减,这一定程度影响了开发速度,对初学者学习开销也比较大,在此分析一种简单的BOOTLOADER,是在三星公司提供的BOOTLOADER上稍微修改后的结果,编译出来的文件大小不超过4k,希望对大家有所帮助.
重要概念
COMPRESSEDKERNELandDECOMPRESSEDKERNEL
压缩后的KERNEL,按照文档资料,现在不提倡使用DECOMPRESSEDKERNEL,而要使用COMPRESSEDKERNEL,它包括了解压器.因此要在ram分配时给压缩和解压的KERNEL提供足够空间,这样它们不会相互覆盖.
当执行指令跳转到COMPRESSEDKERNEL后,解压器就开始工作,如果解压器探测到解压的代码会覆盖掉COMPRESSEDKERNEL,那它会直接跳到COMPRESSEDKERNEL后存放数据,并且重新定位KERNEL,所以如果没有足够空间,就会出错.
Jffs2FileSystem
可以使armlinux应用中产生的数据保存在FLASH上,我的板子还没用到这个.
RAMDISK
使用RAMDISK可以使ROOTFILESYSTEM在没有其他设备的情况下启动.一般有两种加载方式,最常用的一种是,把COMPRESSEDRAMDISKIMAGE放到指定地址,然后由BOOTLOADER把这个地址通过启动参数的方式ATAG_INITRD2传递给KERNEL.具体看代码分析.
启动参数(摘自IBMdeveloper)
在调用内核之前,应该作一步准备工作,delphi源码是什么即:设置Linux内核的启动参数。Linux2.4.x以后的内核都期望以标记列表(taggedlist)的形式来传递启动参数。启动参数标记列表以标记ATAG_CORE开始,以标记ATAG_NONE结束。每个标记由标识被传递参数的tag_header结构以及随后的参数值数据结构来组成。数据结构tag和tag_header定义在Linux内核源码的include/asm/setup.h头文件中.
在嵌入式Linux系统中,通常需要由BOOTLOADER设置的常见启动参数有:ATAG_CORE、ATAG_MEM、ATAG_CMDLINE、ATAG_RAMDISK、ATAG_INITRD等。
(注)参数也可以用COMMANDLINE来设定,在我的BOOTLOADER里,我两种都用了.
开发环境
CPU:S3C,BANK6上有M的SDRAM(两块),BANK0上有MNORFLASH,串口当然是逃不掉的.这样,按照数据手册,地址分配如下:
0x_开始是4k的片内DRAM.
0x_开始是MFLASHbit宽度
0x_开始是MSDRAMbit宽度
注意:控制寄存器中的BANK6和BANK7部分必须相同.
0x_(片内DRAM)存放4k以内的BOOTLOADERIMAGE
0x_开始存放启动参数
0x_存放COMPRESSEDKERNELIMAGE
0x_存放COMPRESSEDRAMDISK
0x_指定为DECOMPRESSEDKERNELIMAGEADDRESS
0x_指定为DECOMPRESSEDRAMDISKIMAGEADDRESS
开发环境:RedhatLinux,armgcctoolchain,armlinuxKERNEL
如何建立armgcc的编译环境:建议使用toolchain,而不要自己去编译armgcc,偶试过好多次,都以失败告终.
先下载arm-gcc3.3.2toolchain
将arm-linux-gcc-3.3.2.tar.bz2解压到/toolchain
tarjxvfarm-linux-gcc-3.3.2.tar.bz2
mv/usr/local/arm/3.3.2/toolchain
在makefile中在把arch=armCROSS_COMPILE设置成toolchain的路径
还有就是INCLUDE=-I../include-I/root/my/usr/local/arm/3.3.2/include.,否则库函数就不能用了
启动方式
可以放在FLASH里启动,或者用Jtag仿真器.由于使用NORFLASH,根据的手册,片内的4KDRAM在不需要设置便可以直接使用,而其他存储器必须先初始化,比如告诉memorycontroller,BANK6里有两块SDRAM,数据宽度是bit,==.否则memorycontrol会按照复位后的默认值来处理存储器.这样读写就会产生错误.
所以第一步,通过仿真器把执行代码放到0x_,(在编译的时候,设定TEXT_BAS
E=0x)
第二步,通过AxD把linuxKERNELIMAGE放到目标地址(SDRAM)中,等待调用
第三步,执行BOOTLOADER代码,从串口得到调试数据,引导armlinux
代码分析
讲了那么多执行的步骤,是想让大家对启动有个大概印象,接着就是BOOTLOADER内部的代码分析了,BOOTLOADER文章内容网上很多,我这里精简了下,删除了不必要的功能.
BOOTLOADER一般分为2部分,汇编部分和c语言部分,汇编部分执行简单的硬件初始化,C部分负责复制数据,设置启动参数,串口通信等功能.
BOOTLOADER的生命周期:
⒈初始化硬件,比如设置UART(至少设置一个),检测存储器==.
⒉设置启动参数,这是美的空调程序源码为了告诉内核硬件的信息,比如用哪个启动界面,波特率==.
⒊跳转到LinuxKERNEL的首地址.
⒋消亡
同时在linux中GRUB(GRandUnifiedBootloader)是一个系统默认自带的多重启动管理器。它可以在多个操作系统共存时选择引导哪个系统。尽管引导操作系统看上去是件平凡且琐碎的任务,但它实际上很重要。如果引导装入器不能很好地完成工作或者不具有弹性,那么就可能锁住系统或者无法引导计算机
如何编写驱动程序?
代码:#includelinux/module.h>#includelinux/kernel.h>#includeasm/io.h>#includelinux/miscdevice.h>#includelinux/fs.h>#includeasm/uaccess.h>//流水灯代码#defineGPM4CON0xe0#defineGPM4DAT0xe4staticunsignedlong*ledcon=NULL;staticunsignedlong*leddat=NULL;//自定义write文件操作(不自定义的话,内核有默认的一套文件操作函数)staticssize_ttest_write(structfile*filp,constchar__user*buff,size_tcount,loff_t*offset){ intvalue=0;intret=0;ret=copy_from_user(value,buff,4);//底层驱动只定义基本操作动作,不定义功能if(value==1){ *leddat|=0x0f;*leddat=0xfe;}if(value==2){ *leddat|=0x0f;*leddat=0xfd;}if(value==3){ *leddat|=0x0f;*leddat=0xfb;}if(value==4){ *leddat|=0x0f;*leddat=0xf7;}return0;}//文件操作结构体初始化staticstructfile_operationsg_tfops={ .owner=THIS_MODULE,.write=test_write,};//杂设备信息结构体初始化staticstructmiscdeviceg_tmisc={ .minor=MISC_DYNAMIC_MINOR,.name="test_led",.fops=g_tfops,};//驱动入口函数杂设备初始化staticint__inittest_misc_init(void){ //IO地址空间映射到内核的虚拟地址空间ledcon=ioremap(GPM4CON,4);leddat=ioremap(GPM4DAT,4);//初始化led*ledcon=0xffff;*ledcon|=0x;*leddat|=0x0f;//杂设备注册函数misc_register(g_tmisc);return0;}//驱动出口函数staticvoid__exittest_misc_exit(void){ //释放地址映射iounmap(ledcon);iounmap(leddat);}//指定模块的出入口函数module_init(test_misc_init);module_exit(test_misc_exit);MODULE_LICENSE("GPL");
扩展资料:
.h
,文件包括函数原型、宏定义和类型定义。只要使用#include命令,这些定义就可被任何源文件使用。如下例所示:#include"myproject.h"//用在当前项目中的函数原型、类型定义和宏你可以在#include命令中使用宏。如果使用宏,该宏的取代结果必须确保生成正确的#include命令。例1展示了这样的#include命令。例1在#include命令中的宏#ifdef_DEBUG_#defineMY_HEADER"myProject_dbg.h"#else#defineMY_HEADER"myProject.h"#endif#includeMY_HEADER当上述程序代码进入预处理时,如果_DEBUG_宏已被定义,那么预处理器会插入myProject_dbg.h
的内容;如果还没定义,则插入myProject.h
的内容。CRC-8和CRC-算法
在汽车通信系统中,CRC校验是确保数据传输准确性的关键技术。以CRC8为例,它作为XOR校验的升级,主要用于检测报文中的错误。发送前,会通过Rolling counter和Checksum进行校验,Rolling counter用于检测丢帧,Checksum(如CRC8)则确保同一时刻的报文无误。
CRC8的原理是,发送端根据报文生成一个1字节的校验码,使用特定的生成多项式,如g(x)=1·x^8+0·x^7+0·x^6+1·x^5+1·x^4+0·x^3+0·x^2+0·x^1+1·x^0,转换为二进制即0x。登记资料php源码接收端使用相同的生成多项式进行校验,若计算结果与接收到的校验码相符,就确认数据传输正确。
报文编码有Intel和Motorola两种格式,影响了字节的排列顺序。CAN报文按照高位MSB到低位LSB的顺序发送。举例来说,传输车速0x,Motorola编码方式会把高位放在低字节的高位,Intel编码则相反。
计算CRC8时,先将数据左移8位,然后逐位与生成多项式的二进制形式进行异或运算。对于每个字节,可能需要进行多次判断、移位和异或操作。使用查表法可以简化计算,预先计算所有字节的CRC结果,查询时直接获取,大大减少计算量。
CRC是CRC校验的另一种版本,它有多种标准,如CRC_CCITT、CRC_XMODEM等,尽管原理相似,但在数据输入和输出的处理方式上有所区别。CRC的计算流程通常包括选择初值、异或数据、根据最高位移位和异或多项式、重复处理所有输入数据,最终生成位校验码。
总的来说,CRC校验是通过复杂的算法保证数据传输的准确性和完整性,不同的版本(如CRC8和CRC)在计算细节和标准上有所差异,但核心原理是一致的。如果你对这些算法感兴趣,可以关注汽车控制与人工智能微信公众号获取更详细的源码资料。
路由器升级有什么作用?
IOS被称为Cisco路由器(交换机)的灵魂,升级IOS可以修复旧IOS中的Bug、安全漏洞,并且能够较大程度地提升设备的性能、扩展设备功能。但是,升级IOS网络工程师需要冒一定的风险,稍有不慎就会造成灾难性的后果。但也没必要因此因噎废食,只要注意相关的细节就能够将风险降到最低。笔者做网络维护和支持差不多十年了,有教训也有经验,下面和读者分享一下自己在这方面的经验。
1、确定升级IOS的必要性
是否需要升级IOS,这是网络工程师首先要考虑的问题。笔者认为升级IOS的最佳时机是:当Cisco的官方网站有了当前系列路由器(交换机)的新的IOS更新的时候,应该考虑升级IOS,这需要工程师时刻关注新的动态。另外,因为网络的扩展需要为路由器(交换机)添加新的模块或者组件点击时候,一般要将当前IOS升级到支持该模块的IOS版本。最后,我认为还有一个非常重要的升级理由是,当该系列的路由器(交换机)爆出Bug或者安全漏洞时,一定要升级IOS。在我接触的网络管理器中,很多人非常看重路由器的性能与功能,而对于其安全性重视不够。其实,这是非常错误的价值取向,当没有了安全性的保障,性能与功能还有什么意义?只不过是为攻击者提供了一个高性能的设备罢了。
2、确保IOS的可靠性
在确定了要升级IOS,那么必须要保证IOS的可靠性。当前的黑客技术几乎是无孔不入,IOS也在劫难逃。Cisco的IOS源代码泄露已是不争的事实,网络是充斥着大量被攻击者篡改并且植入后门的IOS,而且黑客已经开发出Cisco路由器的后门。另外,互联网上也有很多提供IOS下载的网站,这些IOS版本比较混乱,图方便下载在升级过程中会造成意想不到的后果。Ios的可靠性包括两样方面,一个是安全性即确保是纯净的IOS文件,另外一个要确保IOS版本和待升级的IOS是对应的。基于这样的考虑,一定要从Cisco的官方网站下载对应的IOS。我在这方面是有着深刻的教训的,当初用从其它地方下载的IOS进行升级,最终导致了升级失败路由器宕机。
3、选择合适的升级方法
Cisco路由器的IOS升级可以采用多种方法,在升级之前一定要考虑采用那种升级方式。在正常情况下,我们一般采用TFTP升级法,即利用TFTP软件将电脑部署成TFTP服务器,然后连接电脑和路由器,通过copy tftp flash即可根据提示完成IOS的升级。但是,在某些特殊情况下,就不能采用这种方法了。比如在曾经的一次升级失败后,可在路由器启动时按住Ctrl+break键,进入rom监视模式执行copy tftp flash命令对路由器的IOS进行升级。另外,如果不小心使用了erase flash命令擦除了flash,这时候的升级方式就比较麻烦一些。总之,在进行IOS升级前一定要根据实际情况选择最合适的升级方式,其原则是越简单、越安全越好。
4、搭建测试环境测试
毕竟真实环境下中的升级是具有风险的,为了确保万无一失,我建议大家做好搭建环境先进行测试。这个测试主要包括两部分,一是测试确保IOS文件的正确性,二是演习并熟悉相关的升级命令,最好把相关的命令用笔记下来确保正确。至于测试环境,应该是因人而异、因企业而异。对于某些大的企业一般有专门的网络实验室,在这样的实验室中进行升级测试当然是做好不过了。如果你没有这样的环境,可以用Cisco模拟器搭建模拟环境进行测试。我建议大家用Dynamips这款模拟器,与其他的模拟器不同,dynamips可以是模拟出cisco路由器的硬件环境,然后在这个环境中直接运行Cisco的IOS。换句话讲,dynamips 模拟出的是真实的路由器,就像你在PC上用街机模拟器玩街机游戏一样。通过测试,就能够把问题解决在测试阶段,保证了真实环境下升级万无一失。
5、升级前的必须要保证的工作
俗话说,有备无患,在万事俱备,只等敲入命令进行IOS升级时,一定要做好以下工作。第一点,务必要备份此前的IOS,输入命令show flash进行查看,然后copy flash:*.bin tftp将相应的bin保存到tftp服务器。升级前的备份可是我们升级失败后的救命稻草,为你省去很多麻烦。笔者就有这样惨痛的经历,在一次升级IOS时心存侥幸没有备份IOS就直接升级,结果升级失败后也无法恢复原来的IOS。第二点,在升级前一定要检查所要升级的IOS版本需要的RAM和Flash大小,并确保路由器能够保证其需要,否则必然导致升级失败。第三,稳定的电源,要保证在升级过程中不发生断电。另外,作为tftp服务器的电脑的稳定性也有保证。
6、灾难恢复时的细节
不幸地如果遭遇IOS升级失败,最快地进行灾难修复这是当务之急。至于恢复的方法要根据情况而定,比如可以尝试进入rom监控模式使用Xmodem命令进行恢复,或者使用confreg指定以网络IP广播方式启动等。但是,不管采用哪种方式恢复,一定要恢复的是此前备份的IOS,而不要尝试进行使用新的IOS进行升级恢复。因为,也许正是该IOS才造成了升级的失败,这样的尝试会使事情变得更糟。
7、升级完成后的可靠性测试
在IOS升级完成后,不要以为万事大吉了。此时一定要进行安全性、可靠性测试,只有经过一段时间的测试以及运行检验才可宣告升级真正成功。而后期的检验是被大多数管理员忽视了,在最初完成升级的一段时间内,应该密切注意设备的运行情况。如果出现异常,要进行分析是否是由这次升级引起的。
串口调试助手软件Win版V免费版串口调试助手软件Win版V免费版功能简介
大家好,关于串口调试助手软件Win版 V3.8.6 免费版,串口调试助手软件Win版 V3.8.6 免费版功能简介这个很多人还不知道,现在让我们一起来看看吧!Win串口调试工具是一款方便易用的串口通信调试软件。该软件支持串口自动识别,能设置校验、数据位和停止位,能以ASCII码或十六进制接收或发送任何数据或字符,可以任意设定自动发送周期,有需要的话可以亲自体验下。
小编精选:串口调试工具
功能特点
1、支持自定义波特率,可支持各种非标准波特率;
2、串口自动设别,自动搜索串口;
3、接收数据可以进行十六进制和ASCII切换;
4、接收数据时,光标始终显示在最后一行或指定行;
5、可以以十六进制或ASCII格式,向指定串口发送数据;
6、定时发送数据;
7、自定义波特率,支持非标准波特率;
8、支持日志缓冲;
9、支持ASCII和Hex数据转换;
、支持时间戳功能,可显示发送及接受时间。
与其他软件比较
在PC机上,目前有许多免费的串口调试工具,比较常用的有:
1、串口调试助手(V2.2)
优点:使用方便,用户群最多,有书介绍及免费源代码。
缺点:1因采用多线程接收技术,接收有时丢数,特别在高波特率或使用USB转串口时丢数较多。
2最大只支持.2K波特率。
3只能选COM1~COM4,使用USB转串口时,要重新映射串口。
2、SSCOM3.2
优点:使用方便,接收不丢数。
缺点:高波特率只有.2K、K、K,没有.4K。
3、PCOMAPR1.5(pcomtest)
优点:波特率高,最高达.6K,接收不丢数。
缺点:只有COM1~COM4可选,使用USB转串口时,要重新映射串口。
4、Accesport1.
优点:功能强,配置参数多,接收不丢数。
缺点:波特率较高时,如.4K,如果接收数据量大,比量接收,则无法发送数据。
5. 友善串口调试助手
优点:功能强,支持单界面双串口,可自动探测USB映射的COM口
缺点:日志记录按钮不太方便。
猜你喜欢
SSCOM(多串口调试工具) V5..1 绿色免费版:SSCOM是一款用来调试串口的工具。用户可以通过该多串口调试工具来调试蓝牙,检测串口的状况。该软件可以及时显示存在的串口号,如果用户增加了usb转串口设备,串口号就会出现在列表内。 SerialPort串口调试工具 V2.0 免费版:SerialPort串口调试工具是一款绿色免安装的免费串口调试程序,有了这款程序,你可以选择好串口、波特率、数据位、校验位、停止位、校验码,打开后可以进行十六进制数发送。 SSCOM多串口调试工具:SSCOM串口调试助手是一款非常专业的多串口调试助手。它的功能十分强大,支持显示串口号,并且可以根据需要选择通讯端口,该版本为最新的版本,在功能上也是最为强大的,还在等什么,赶紧试试吧! 友善串口调试工具:友善串口调试助手是一款串口调试工具。他支持单次发送、多次发送、循环发送等,支持XMODEM MODEM 协议文件传输,适宜单片机编程时对RS通讯测试用。 串口调试工具下载:流星串口调试工具是一款接收数据可以进行十六进制和ASCII切换,支持定时发送数据,自动记录上次操作参数,如串口号,波特率等,可以以十六进制或ASCII格式,向指定串口发送数据。
2024-12-26 12:31
2024-12-26 12:13
2024-12-26 11:05
2024-12-26 10:20
2024-12-26 09:56