2018-07-30 17:38:19 chile19 阅读数 3090
  • 嵌入式Linux文件与串口编程

    本课程介绍Linux环境下shell编程,普通文件与设备文件的编程方法,串口介绍与应用编程。 学习条件: 1.C语言编程基础 2.嵌入式Linux开发基础

    7346 人正在学习 去看看 沈寒

 

什么是Linux console(控制台)

Linux 控制台是Linux 内核的一个内部系统控制台,它为内核和进程提供了一个方式去发送并输出文本到用户以及从用户处接收文本。用户通常使用计算机键盘输入文本并在计算机屏幕读取输出文本。在这里探究的,是命令行界面(framebuffer暂不讨论)。更详细介绍可看:https://en.wikipedia.org/wiki/Linux_console

禁用console(控制台)的目的

目的有3个,分别是:

1、禁止显示命令行界面

2、取消串口打印,防止设备被他人读取到系统打印信息

3、防止u-boot的启动参数被修改,保证设备能正常启动

如何找到跟console(控制台)相关的kernel参数

一切关于Linux系统的资料,都可以在Linux官网找到。因此,我们可以在https://www.kernel.org/doc/html/v4.17/admin-guide/kernel-parameters.html找到我们需要的东西。搜索“console”关键词,可找到以下内容:

所以,我们可以通过设定 “console”这个参数的值,来命令行界面、串口打印信息输出到哪一个设备。现在我们不需要命令行界面和串口打印信息,可以将 console的值设为 NULL。

如何直接在Linux系统通过u-boot传递参数给kernel

在u-boot下,我们可以通过命令访问和修改环境变量。我们也可以通过 fw_printenv工具直接在Linux系统中访问和设置以上的参数。我这里就不阐述如何安装 fw_printenv工具,可参考以下链接内容:

https://blog.csdn.net/gl1987807/article/details/18045743

成功安装 fw_printenv 工具后,要实现通过u-boot传递参数给kernel,该修改哪个参数呢?答案是 bootargs。

在这里,简单介绍一下,什么是 bootargs。

bootargs 是传递给kernel的启动参数,这个参数决定了根文件系统的位置、根文件系统的类型等等,以及我们这里最关心的console。其传递过程如下,里面涉及到u-boot和kernel 源码的函数:

实现步骤:

1、通过ssh接上板子;

chile@chile-mach:/mnt/hgfs/linuxshare/firmware$ ssh -i ssh.txt root@192.168.8.118

2、验证是否已经成功安装fw_printenv工具,输入fw,然后按两次tab,看看是否出现“fw_printenv  fw_setenv”回复,若有,即说明已经安装fw_printenv工具成功,若无,则需要重新安装;

# fw_
fw_printenv  fw_setenv

3、输入命令 fw_printenv,查看目前环境,bootargs 到下一个分号(;),就是当前的bootargs参数的值;

# fw_printenv 
ethprime=FEC
fdt_addr=0x18000000
loadaddr=0x12000000
bootcmd=ext4load mmc 2:1 ${loadaddr} zImage;ext4load mmc 2:1 ${fdt_addr} imx6q-sabresd.dtb;setenv bootargs root=PARTUUID=8cb74943-02 vt.global_cursor_default=0  rootwait rw;bootz ${loadaddr} - ${fdt_addr};

4、添加 console = null 。首先,将原来 bootcmd 到结尾的内容复制;然后,开始使用 fw_setenv 命令来设置环境,将 console = null 加入到刚刚复制的内容中,具体如下:

# fw_setenv bootcmd "ext4load mmc 2:1 \${loadaddr} zImage;ext4load mmc 2:1 \${fdt_addr} imx6q-sabresd.dtb;setenv bootargs root=PARTUUID=8cb749
43-02 vt.global_cursor_default=0 console=null rootwait rw;bootz \${loadaddr} - \${fdt_addr};"

5、最后,重新查看当前环境,可以发现,console = null 已经添加进去;

# fw_printenv 
ethprime=FEC
fdt_addr=0x18000000
loadaddr=0x12000000
bootcmd=ext4load mmc 2:1 ${loadaddr} zImage;ext4load mmc 2:1 ${fdt_addr} imx6q-sabresd.dtb;setenv bootargs root=PARTUUID=8cb74943-02 vt.global_cursor_default=0 console=null rootwait rw;bootz ${loadaddr} - ${fdt_addr};

完。

2013-08-08 09:16:47 NEOSL 阅读数 704
  • 嵌入式Linux文件与串口编程

    本课程介绍Linux环境下shell编程,普通文件与设备文件的编程方法,串口介绍与应用编程。 学习条件: 1.C语言编程基础 2.嵌入式Linux开发基础

    7346 人正在学习 去看看 沈寒

最近把java web项目部署到weblogic上,一直通过windows端的F-Secure操作服务器,每次启动weblogic使用./startWebLogic.sh,但是发现退出终端后,weblogic也是自动退出,查了资料,发现Unix/Linux下一般想让某个程序在后台运行,很多都是使用 & 在程序结尾来让程序自动运行。比如我们要运行mysql在后台:

 

         /usr/local/mysql/bin/mysqld_safe --user=mysql &

 

但是我们很多程序并不象mysql一样可以做成守护进程,可能我们的程序只是普通程序而已,一般这种程序即使使用 & 结尾,如果终端关闭,那么程序也会被关闭。为了能够后台运行,我们需要使用nohup这个命令,比如我们有个start.sh需要在后台运行,并且希望在后台能够一直运行,那么就使用nohup:

nohup ./start.sh &

在shell中回车后提示:

 

        [~]$ appending output to nohup.out

        原程序的的标准输出被自动改向到当前目录下的nohup.out文件,起到了log的作用。

 

但是有时候在这一步会有问题,当把终端关闭后,进程会自动被关闭,察看nohup.out可以看到在关闭终端瞬间服务自动关闭

 

在当shell中提示了nohup成功后还需要按终端上键盘任意键退回到shell输入命令窗口,然后通过在shell中输入exit来退出终端(如果每次在nohup执行成功后直接点关闭程序按钮关闭终端.。所以这时候会断掉该命令所对应的session,导致nohup对应的进程被通知需要一起shutdown)

 

       正确启动weblogic服务

       nohup ./startWebLogic.sh &

       

在Linux中,如果要让进程在后台运行,一般情况下,我们在命令后面加上&即可,实际上,这样是将命令放入到一个作业队列中

 

       查看日志

       tail -100f nohup.out 

 

查看后台运行的进程

jobs -l

 

       退出F-secure

       exit

       

        附:nohup命令参考

 

nohup 命令

 

  用途:不挂断地运行命令。

 

  语法:nohup Command [ Arg ... ] [ & ]

 

描述:nohup 命令运行由 Command 参数和任何相关的 Arg 参数指定的命令,忽略所有挂断(SIGHUP)信号。在注销后使用 nohup 命令运行后台中的程序。要运行后台中的 nohup 命令,添加 & ( 表示"and"的符号)到命令的尾部。

 

无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。如果标准错误是一个终端,那么把指定的命令写给标准错误的所有输出作为标准输出重定向到相同的文件描述符。

 

退出状态:该命令返回下列出口值:

 

  126 可以查找但不能调用 Command 参数指定的命令。

 

  127 nohup 命令发生错误或不能查找由 Command 参数指定的命令。

 

  否则,nohup 命令的退出状态是 Command 参数指定命令的退出状态。

 

  nohup命令及其输出文件

 

nohup命令:如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。nohup就是不挂起的意思( nohang up)。

 

  该命令的一般形式为:nohup command &

 

  使用nohup命令提交作业

 

如果使用nohup命令提交作业,那么在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中,除非另外指定了输出文件:

 

  nohup command > myout.file 2>&1 &

 

在上面的例子中,输出被重定向到myout.file文件中。

 

使用 jobs 查看任务。

 

使用 fg %n 关闭。

 

另外有两个常用的ftp工具ncftpget和ncftpput,可以实现后台的ftp上传和下载,这样就可以利用这些命令在后台上传和下载文件了。

 

附:查看linux系统的几种方法:

  1. uname -a
  2. cat /proc/version
  3. cat /etc/issue
  4. lsb_release -a

 

       参考文章:http://www.einit.com/user1/11/archives/2006/3603.html  

                         http://www.williamlong.info/archives/482.html  

                         http://yakar.iteye.com/blog/687656

2013-02-17 11:47:06 acs713 阅读数 5642
  • 嵌入式Linux文件与串口编程

    本课程介绍Linux环境下shell编程,普通文件与设备文件的编程方法,串口介绍与应用编程。 学习条件: 1.C语言编程基础 2.嵌入式Linux开发基础

    7346 人正在学习 去看看 沈寒

       可通过读写/proc/sys/kernel/printk文件可读取和修改控制台的日志级别。查看这个文件的方法如下:
  #cat /proc/sys/kernel/printk 6 4 1 7

       上面显示的4个数据分别对应控制台日志级别、默认的消息日志级别、最低的控制台日志级别和默认的控制台日志级别。
  可用下面的命令设置当前日志级别:
  # echo 8 > /proc/sys/kernel/printk
  这样所有级别<8,(0-7)的消息都可以显示在控制台上.

2018-06-13 16:45:50 qq_19004627 阅读数 473
  • 嵌入式Linux文件与串口编程

    本课程介绍Linux环境下shell编程,普通文件与设备文件的编程方法,串口介绍与应用编程。 学习条件: 1.C语言编程基础 2.嵌入式Linux开发基础

    7346 人正在学习 去看看 沈寒

如何将ubuntu控制台输出到串口?

Linux使用ubuntu14.04发行版本

操作步骤:


1、修改/etc/default/grub

## Modify this line by leekwen
GRUB_CMDLINE_LINUX="console=tty0 console=ttyS0,115200n8"

## Modify this line by leekwen
GRUB_TERMINAL=serial

## Add this line by leekwen
GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"

2、运行update-grub命令


3、增加配置文件/etc/init.d/ttyS0.conf


leekwen@leekwen:/etc/default$ cat /etc/init/ttyS0.conf
# Add those lines
# ttyS0 - getty
#
# This service maintains a getty on ttyS0 from the point the system is
# started until it is shut down again.


start on stopped rc RUNLEVEL=[2345] and (
            not-container or
            container CONTAINER=lxc or
            container CONTAINER=lxc-libvirt)


stop on runlevel [!2345]


respawn
exec /sbin/getty -L 115200 ttyS0 vt100


# Add those lines End

4、查看设置是否成功

重启电脑
# cat /proc/cmdlineBOOT_IMAGE=/boot/vmlinuz-3.13.0-32-generic root=/dev/sda1 ro console=tty0 console=ttyS2,115200n8
# who
latelee ttyS2


参考地址:


https://help.ubuntu.com/community/SerialConsoleHowto

https://help.ubuntu.com/community/Grub2
dmesg
2018-05-15 13:35:13 baiyibin0530 阅读数 978
  • 嵌入式Linux文件与串口编程

    本课程介绍Linux环境下shell编程,普通文件与设备文件的编程方法,串口介绍与应用编程。 学习条件: 1.C语言编程基础 2.嵌入式Linux开发基础

    7346 人正在学习 去看看 沈寒

1.dmesg介绍

在dmesg里我们可以查看到开机信息,printk产生的信息等。若研究内核代码,在代码中插入printk函数,然后通过dmesg观察是一个很好地方法。

 

2.dmesg输出含义

dmesg 输出的数字含义是什么,纠结了一会儿,下面给出解释

终端输入dmesg,可以看到每行最开始显示的是一个综括号,里面的数字为timestamp,时间戳,该时间指示的系统从开机到现在的运行时间,单位为s 秒。

 

图1

 

3.dmesg -c

  在显示的同时,clean掉dmesg缓存中信息

4.dmesg -T

  以当前时间的方式显示时间信息,而不是图1所示的开机时间

 

图2

 

3 dmesg -d 

显示dmesg中两条打印信息的时间间隔

 

图3

 

我们可以计算,上一行的时间戳 + 下一行的间隔 = 下一行的时间戳

例如:第一行和第二行,1069.638561 + 0.000003 = 1069.638564  这里的时间单位为秒

 

4.dmesg -d -T

-d和-T参数混合使用,效果可想而知

 

图4

 

5.dmesg | tail 显示dmesg最近一次的输出

 

由上面我们可以看到dmesg可以让我们获得很多信息,包括函数进入时间等,可以利用dmesg原本已有的功能进行辅助分析。dmesg 很~\(≧▽≦)/~赞

没有更多推荐了,返回首页