一种Linux系统串口功能禁用的方法与流程

文档序号:28611958发布日期:2022-01-22 12:33阅读:1557来源:国知局
一种Linux系统串口功能禁用的方法与流程
一种linux系统串口功能禁用的方法
技术领域
1.本技术涉及嵌入式设备技术领域,尤其涉及一种linux系统串口功能禁用的方法。


背景技术:

2.串口是嵌入式设备的主要调试工具,通常会有很多设备信息从串口输出,有些设备处于安全考虑,需要关闭串口功能,防止重要信息泄露,同时还要求能够动态开启串口功能,当设备出问题是便于定位问题。
3.目前基于linux的嵌入式设备串口功能禁用方法是通过改变镜像源码来实现的,一旦工程编译完成,串口的开启/关闭状态已经确定,程序运行过程中无法改变。


技术实现要素:

4.本技术实施例提供了一种linux系统串口功能禁用的方法,以解决目前嵌入式设备的串口开关功能在程序运行过程中无法改变的问题。
5.本技术提供了一种linux系统串口功能禁用的方法,包括:
6.调用linux内核中的环境变量;
7.获取所述环境变量中的串口开关参数;
8.根据所述串口开关参数更改内核启动参数中的控制台参数;
9.将更改后的控制台参数传递至所述linux内核中,调用函数控制对应串口的动态开关。
10.本技术提供的linux系统串口功能禁用的方法包括:调用linux内核中的环境变量,获取环境变量中的串口开关参数,根据串口开关参数更改内核启动参数中的控制台参数,将更改后的控制台参数传递至linux内核中,调用函数控制对应串口的动态开关。本技术修改linux内核中的uboot,根据uboot的环境变量中开启/关闭串口的串口开关参数来调整内核启动参数中的控制台参数console,linux内核根据调整后的控制台参数console使控制台映射给对应串口,动态打开串口打印,或者使控制台映射给其他虚拟端口,动态关闭串口打印,如此能够使linux系统的串口输出能够动态开启或关闭,且方法简单、方便,无需深入了解linux系统。
附图说明
11.图1为根据一些实施例的linux系统的结构框图;
12.图2为本技术实施例提供的一种linux系统串口功能禁用的方法的流程图。
具体实施方式
13.为便于对申请的技术方案进行描述,以下首先在对本技术所涉及到的一些概念进行说明。
14.为了使本技术领域的人员更好地理解本公开中的技术方案,下面将结合本公开实
施例中的附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部实施例。基于本公开中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本公开保护的范围。
15.图1为根据一些实施例的linux系统的结构框图。如图1所示,linux系统一般包括内核、中间层与应用层,内核是靠近硬件的底层,且内核是linux操作系统常驻内存部分;内核是一段计算机程序,这个程序直接管理硬件,包括cpu、内存空间、硬盘接口、网络接口等等,所有的计算机操作都要通过内核传递给硬件。中间层是内核之外的shell层,即操作系统的系统程序部分;应用层是最高层,即用户程序部分。
16.为了方便调用内核,linux将内核的功能接口制作成系统调用,通过系统调用这个接口,linux将上层的应用与下层的内核分离,隐藏了底层的复杂性,也提高了上层应用的可移植性。
17.uart(universal asynchronous receiver/transmitter,串口)是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工传输和接收。在嵌入式设计中,uart用来与pc进行通信,包括与监控调试器和其他器件,如eeprom通信。
18.在嵌入式linux系统中,串口被看成终端设备。终端就是处理计算机主机输入输出的一套设备,它用来显示主机运算的输出,并且接受主机要求的输入,典型的终端包括显示器、键盘套件、打印机、打字机套件等。
19.终端可分为本地终端、用串口连接的远程终端与用tcp/ip承载的远程终端,本地终端是用vga连接主机和显示器,用ps/2或usb连接主机和键盘,这样的一个显示器/键盘组合;通过串口线把主机接到另外一个有显示器和键盘的主机,通过运行一个终端模拟程序,比如“windows超级终端”来将这台主机的显示器和键盘借给串口对端的主机。用tcp/ip承载的远程终端类似telnet/ssh这般。
20.本地终端与用串口连接的远程终端都是在本地直接关联了物理设备,比如vga、ps/2、串口等,这类终端叫做物理终端;用tcp/ip承载的远程终端在本地没有关联任何物理设备,这类不直接关联物理设备的终端叫做伪终端。
21.目前基于linux的嵌入式设备串口功能禁用方法是通过改变镜像源码来实现的,具体地,linux4.4 menuconfig中,通过使能/关闭“enable support for printk”来开启或关闭内核打印“printk”。
22.‑‑‑
configure standard kernel features(expert users)
23.[*]multiple users,groups and capabilities support
[0024]
[*]sgetmask/ssetmask syscalls support
[0025]
[*]sysfs syscall support
[0026]
[]sysctl syscall support
[0027]
[*]load all symbols for debugging/ksymoops
[0028]
[*]include all symbols in kallsyms
[0029]
[*]enable support for printk
[0030]
[*]bug()support
[0031]
[*]enable elf core dumps
[0032]
[*]enable pc-speaker support
[0033]
[*]enable full-sized data structures for core
[0034]
[*]enable futex support
[0035]
[*]enable eventpoll support
[0036]
[*]enable signalfd() system call
[0037]
[*]enable timerfd() system call
[0038]
在inittab文件中,“::askfirst:/sbin/getty-l ttys0 115200 vt100”用来初始化用户态串口打印,将此行屏蔽/打开来关闭/开启用户串口打印。
[0039]
::sysinit:/usr/etc/init.d/rcs
[0040]
::askfirst:/sbin/getty-l ttys0 115200 vt100
[0041]
但是,通过镜像源码实现串口功能禁用时,一旦工程编译完成,串口的开启/关闭状态已经确定,程序运行过程中无法改变。为了解决这一问题,本技术修改uboot,根据环境变量中开启/关闭串口的开关来调整bootargs中的控制台参数console,以动态控制串口的开启/关闭功能。
[0042]
图2为本技术实施例提供的一种linux系统串口功能禁用的方法的流程图。如图2所示,本技术实施例提供的linux系统串口功能禁用的方法包括:
[0043]
s100:调用linux内核中的环境变量。
[0044]
从技术层面讲,内核是硬件与软件之间的一个中间层,作用是将应用层程序的请求传递给硬件,并充当底层驱动程序,对系统中的各种设备和组件进行寻址。从应用程序的层面讲,应用程序与硬件没有联系,只与内核有联系,内核是应用程序知道的层次中的最底层。内核是一个资源管理程序,负责将可用的共享资源(cpu时间、磁盘空间、网络连接等)分配到各个系统进程。
[0045]
uboot是一个主要用于嵌入式系统的引导加载程序,可以支持多种不同的计算机系统结构,包括ppc、arm、avr32、mips、x86/68k、nios与microblaze。这也是一套在gnu通用公共许可证之下发布的自由软件。
[0046]
uboot的环境变量主要有bootcmd与bootargs,bootcmd是自启动时默认执行的一些命令,可以在当前环境中定义各种不同配置,不同环境的参数设置;bootargs是环境变量中的重中之重,实质是uboot传给内核的参数。
[0047]
s200:获取环境变量中的串口开关参数。
[0048]
uboot环境变量用来存放启动参数、启动命令等信息,本技术在环境变量中增加开启/关闭串口的参数console_onoff=on/off,可使用setenv命令将串口开关参数console_onoff设置为第一参数或第二参数,第一参数可为开启参数,第二参数可为关闭参数。例如,使用setenv命令将串口开关参数console_onoff设置为on,此时表明串口功能打开;使用setenv命令将串口开关参数console_onoff设置为off,此时表明串口功能关闭。
[0049]
s300:根据串口开关参数更改内核启动参数中的控制台参数。
[0050]
linux内核的内核启动参数bootargs主要包括root、rootfstype、console、mem、mtdparts,其中,root用来指定rootfs(文件系统)的位置,例如rootfs=/dev/mtdblock5表示文件系统存放在/dev/mtdblock5中。
[0051]
rootfstype要跟root配合使用,用来指定文件系统类型,常用的嵌入式文件系统
为jffs2、squashfs、ubifs等。
[0052]
console为控制台参数,console=ttyama0,115200,表示使用串口0作为控制台设备,波特率为115200。显示系统消息的终端就叫控制台,linux默认所有虚拟终端(附加在物理终端之上,用软件方式虚拟实现,centos默认启用6个虚拟终端,对应的文件是/dev/tty#)都是控制台,都能显示系统消息。另外,对于那些专门用来模拟终端设备的程序,我们也可以称之为控制台console,像gnome-terminal、urxvt、mlterm、xterm等软件,都可以称之为控制台。
[0053]
整个ddr(double data rate,双倍速率同步动态随机存储器)被划分为两部分:系统内存与mmz,mem表示整个ddr的大小,mmz表示mmz区域大小,需要根据单板配置及内存占用情况合理配置mem和mmz的大小。
[0054]
mtdparts用来指明flash分区划分格式,例如mtdparts=hi_sfc:1m(boot);4m(baseparam),4m(logo),8m(kernel),96m(rootfs),-(otuers);hi_sfc表示flash类型,4m表示分区大小为4mbytes,boot、baseparam等是分区名称。
[0055]
获取到环境变量中的串口开关参数console_onoff后,根据该串口开关参数console_onoff更改bootsrgs中的控制台参数console,如当串口开关参数console_onoff为第一参数时,将控制台参数console更改为第一驱动线程,指定控制台使用第一驱动线程;当串口开关参数console_onoff为第二参数时,将控制台参数console更改为第二驱动线程,指定控制台使用第二驱动线程。
[0056]
s400:将更改后的控制台参数传递至linux内核中,调用函数控制对应串口的动态开关。
[0057]
根据串口开关参数console_onoff更改控制台参数console后,将更改后的控制台参数console传递至linux内核中,之后调用函数控制对应串口的动态开关。即当串口开关参数console_onoff=on时,指定控制台参数console=ttyama0,115200,系统日志会从串口0打印而出;当串口开关参数console_onoff=off时,指定控制台参数console=tty1或console=ttyx,系统日志无法从串口0打印,从而起到了禁用串口打印的效果。
[0058]
在linux中,/dev/ttyx代表物理终端,其中/dev/tty1~/dev/tty63代表的是本地终端,也就是接到本机的键盘、显示器等可以操作的终端。linux内核初始化时会生成63个本地终端,当前使用的终端即为焦点终端。
[0059]
/dev/console用来表示焦点终端,往/dev/console中写入数据时,会显示在系统当前的焦点终端上。/dev/console本质是全局变量,如果当前焦点终端是/dev/tty4,那么/dev/console指向的就是/dev/tty4。
[0060]
在一些实施例中,可在linux系统启动时,直接获取linux内核中的环境变量,根据环境变量中的串口开关参数console_onoff设置内核启动参数中的控制台参数,根据设置的控制台参数控制对应串口的动态开关,从而在linux系统启动时起到禁用某些串口的效果。
[0061]
在一些实施例中,还可在linux系统启动完成后,需要开启或关闭某些串口时,获取linux内核中的环境变量,根据环境变量中的串口开关参数console_onoff修改内核启动参数中的控制台参数,根据修改后的控制台参数控制对应串口的动态开关,从而在linux系统启动完成后起到禁用某些串口的效果。
[0062]
本技术提供的linux系统串口功能禁用的方法包括:调用linux内核中的环境变量,获取环境变量中的串口开关参数,根据串口开关参数更改内核启动参数中的控制台参数,将更改后的控制台参数传递至linux内核中,调用函数控制对应串口的动态开关。本技术修改linux内核中的uboot,在uboot的环境变量中增加串口开关参数console_onoff,根据串口开关参数console_onoff的开关来调整内核启动参数中的控制台参数console,linux内核根据调整后的控制台参数console使控制台映射给对应串口,动态打开串口打印,或者使控制台映射给其他虚拟端口,动态关闭串口打印,即当串口开关参数console_onoff=on时,将控制台参数设置为console=ttyama0,115200,使控制台映射给串口0,打开串口打印;当串口开关参数console_onoff=off时,将控制台参数设置为console=tty1,使控制台映射给其他虚拟端口,关闭串口打印。如此使得linux系统的串口输出能够动态开启或关闭,且方法简单、方便,无需深入了解linux系统。
[0063]
最后应说明的是:以上实施例仅用以说明本技术的技术方案,而非对其限制;尽管参照前述实施例对本技术进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本技术各实施例技术方案的精神和范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1