嵌入式linux,怎么linux 开机自动登录录到console

博客访问: 943783
博文数量: 273
博客积分: 10418
博客等级: 上将
技术积分: 3308
注册时间:
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: LINUX
开机自动登录linux,并自动运行X window应用程序,有其特殊的应用背景,如基于linux平台的监控系统,linux启动后不需要身份验证,而直接运行监控程序等等。本文以Redhat7.2为平台,结合linux启动过程,介绍了如何避免身份验证自动登录,并直接进入X window自动运行应用程序。
linux 在启动过程的最后阶段(具体启动步骤略),init 会根据 /etc/inittab文件的最后一行x:5:respawn:/etc/X11/prefdm -nodaemon运行/etc/X11/prefdm脚本,(Red hat 7.2缺省时是这样的)。prefdm脚本的主要任务是完成X window的启动,可以有几种启动X window的方法,都包含在prefdm脚本中,几种主要方法有:
运行xdm启动X window;
运行gdm,进入gnome桌面环境;
运行kdm进入kde桌面环境;
自动登录进入linux;
prefdm脚本框架大致如下:
PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin
. /etc/profile.d/lang.sh
# 第一步:查看是否为自动登录
if [ -f /etc/sysconfig/autologin -a -x /usr/sbin/autologin ]; then
if /usr/sbin/ then
# 第二步:如果不是自动登录方式,就会在/etc/sysconfig/desktop中搜寻用户偏爱的登录方式
# 可以是kdm、gdm以及xdm,并运行相应的kdm、gdm以及xdm。
在/etc/X11/prefdm脚本中,是否实现自动登录有一个条件测试开关,事实上,可以在这里注释掉测试开关,直接执行启动X window的操作。
自动登录实质上就是绕过身份验证,直接启动X window。X window的启动可以由xinit来完成。
Xinit用来启动X window系统服务器以及系统上的第一个客户程序,可以通过为xinit传递命令行参数的形式指定要启动的服务器及客户程序。如果不传递参数给xinit,它将在用户的根目录下寻找并运行 .xinitrc脚本来启动客户程序;在用户的根目录下寻找并运行 .xserverrc脚本来启动服务器。如果xinit在用户的根目录下找不到.xinitrc、.xserverrc,xinit将使用缺省的X :0。
实际上,用startx来启动X更为方便。对于运行单一会话的X window 系统,startx提供了更为良好的用户接口。同样,startx首先在用户的根目录下寻找 .xinitrc及.xserverrc脚本,如果找不到这两个脚本,startx将使用/etc/X11/xinit/xinitrc以及/etc/X11/xinit/xserverrc脚本。
startx脚本的最基本框架是:
a、 寻找.xinitrc,如果没有则使用xinitrc;
b、 寻找.xserverrc,如果没有则使用xserverrc;
c、 根据找到的脚本确定xinit的参数;
由此可看出,startx在不需要传递任何参数的情况下,可以完成启动X的任务,因此,可以如下修改/etc/X11/prefdm脚本来实现自动登录:
PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin
. /etc/profile.d/lang.sh
# 第一步:查看是否为自动登录
#if [ -f /etc/sysconfig/autologin -a -x /usr/sbin/autologin ]; then
#注释掉上边的条件测试,直接运行startx
if /usr/X11R6/bin/ then
当然,应确保/etc/inittab中的启动级别为5。
重新启动系统,会发现系统不验证用户身份,直接进入X window,此时的用户身份为root。但是,如果原来root有自己的桌面、默认shell时,上述方法启动X不一定保证还能拥有原来的设置。为了在启动X后,在避免验证身份的同时,又不改变用户原来的设置,那么在运行startx之前,还有工作要做。
观察原来/etc/X11/prefdm脚本的自动登录部分:
# 第一步:查看是否为自动登录
if [ -f /etc/sysconfig/autologin -a -x /usr/sbin/autologin ]; then
if /usr/sbin/ then
不难看出,脚本中保留了自动登录的接口:一个可执行文件/usr/sbin/autologin以及一个配置文件/etc/sysconfig/autologin。
1、/etc/sysconfig/autologin配置文件的实现:
#config for autologin
EXEC=/usr/X11R6/bin/startx
说明,USER指定自动登录时的用户名;EXEC指定启动X要运行的程序。
2、/usr/sbin/autologin可执行文件的实现:
/*********************
autologin.c
*********************/
int main(int argc, char **argv)
struct passwd *
char *dir, *
char *user=NULL;
char *cmd=NULL;
user="root";
/*为了能说明问题又保持程序简洁,这里默认登录用户为root,实际上,
登陆用户名应该从/etc/sysconfig/autologin中得到,
程序实现时要注意过滤掉/etc/sysconfig/autologin中的无效用户名*/
cmd="/usr/X11R6/bin/startx";
/*同样,这里直接指定启动X window的程序,实际上,该程序应该从/etc/sysconfig/autologin中得到*/
pw = getpwnam(user);
//getpwnam返回包含用户信息的passwd结构(该结构在pwd.h中定义)。
uid=pw->pw_
gid=pw->pw_
dir=strdup(pw->pw_dir);
shell=strdup(pw->pw_shell);
//获得用户相关信息
printf("ERROR: No such user %s!\n", user);
chown("/dev/console", uid, gid);
chown("/dev/tty", uid, gid);
//为控制台和终端设置用户ID及组ID
//下面是设置用户相关ID
setregid(gid, gid);
setegid(gid);
setgid(gid);
setreuid(uid, uid);
seteuid(uid);
setuid(uid);
setenv("HOME", dir, 1);
setenv("SHELL", shell, 1);
setenv("USER", user, 1);
setenv("LOGNAME", user, 1);
//设置用户相关环境变量
chdir(dir);
//切换到用户根目录
user=NULL;
execvp(cmd, argv);
/*在配置完用户的相关信息后,执行启动X window操作。注意这里默认执行/usr/X11R6/bin/startx */
printf("ERROR: Couldn't exec %s: %s\n", cmd, strerror(errno));
运行gcc -o autologin autologin.c,拷贝autologin可执行文件到/usr/sbin/autologin,拷贝autologin配置文件到/etc/sysconfig/autologin。重新启动系统,会直接进入X window并保留用户原来所有的风格。
如果不需要自动登录的配置文件/etc/sysconfig/autologin,所有的操作都在/usr/sbin/autologin以默认的方式实现(比如,默认登录身份为root,默认执行操作为/usr/X11R6/bin/startx等),那么,/etc/X11/prefdm脚本的自动登录部分可简化如下:
# 第一步:查看是否为自动登录
if /usr/sbin/ then
//第二步 ......
即在脚本中去掉条件测试开关,直接执行/usr/sbin/autologin,这时,只需要拷贝autologin可执行文件到/usr/sbin/autologin,不再需要拷贝autologin配置文件到/etc/sysconfig/autologin。
如果重新启动后系统进入了kde,而用户需要进入gnome,只需运行switchdesk gnome在重新启动系统即可,以后每次启动时会自动进入gnome;反之亦然。
一般系统自动登录的目的是启动X window 后自动运行某个X window程序。如果系统默认的启动级别为3,那么如果要在系统启动后自动运行某些应用程序,只需要在某些脚本中加入相应命令即可,不再详述。在X window启动后自动运行应用程序要复杂一些,幸好,kde和gnome都为此留下了自动启动接口。如果在kde桌面环境下自动启动应用程序,只需要把应用程序名字加入/root/.kde/Autostart/目录下即可(这里注意不同用户的根目录可能不同,如用户zyx的根目录可能为/home/zyx)。如果在gnome桌面环境下自动启动应用程序,只需把应用程序的名字加入/主菜单/程序/设置/会话/会话特性及启动程序的startup programs属性页中即可。
阅读(3774) | 评论(2) | 转发(0) |
相关热门文章
给主人留下些什么吧!~~
修改启动脚本文件
请问我在arm linux下通过tinylogin以root自动登录进入到shell后怎么设置才能开机自动运行自己的应用程序呢?
请登录后评论。1.Bad Magic Number&## Booting image at
...Bad Magic NumberOMAP5912 OSK # (tftp下载好kernel的uImage后就停止在这,不能启动kernel)问题原因:启动参数设置错误,0x处不可以执行。有的开发板sdram不是在0x,所以不能把kerneluImage下载到0x中运行。如我之前的bootcmd参数为:setenv bootcmd tftpboot uImage\; bootm 。但板子Omap5912的sdram地址在0x,将参数改为setenvbootcmd tftpboot
uImage\; bootm 后便可以启动kernel了。2.启动停止在"Starting kernel ..."TFTP from server 192.168.167.170; our IP address is 192.168.167.15Filename 'uImage'Load address: 0xLoading: #################################################################& && && &#################################################################doneBytes transferred = ee9b4 hex)## Booting image at
...& &Image Name:& &Linux-2.6.18-mh8_pro500-versatil& &Image Type:& &ARM Linux Kernel Image (uncompressed)& &Data Size:& & 2025844 Bytes =&&1.9 MB& &Load Address: & &Entry Point:&&& &Verifying Checksum ... OKOKStarting kernel ...& &(卡在这里)问题原因:多半是kernel没编译成功。确认configure参数是否配置正确,是否选择了正确的目标编译平台,如smdk2410等。3.不能启动kernelStarting kernel ...Uncompressing Linux............................................................................. done, booting the kernel.问题原因:可能是Bootargs参数设置错误,确认bootargs设置是否正确。4.不能挂载nfseth0: link upIP-Config: Complete:& && &device=eth0, addr=192.168.167.15, mask=255.255.255.0, gw=192.168.167.254,& &&&host=192.168.167.15, domain=, nis-domain=(none),& &&&bootserver=192.168.167.170, rootserver=192.168.167.170, rootpath=Looking up port of RPC
on 192.168.167.170Root-NFS: Unable to get nfsd port number from server, using defaultLooking up port of RPC
on 192.168.167.170Root-NFS: Unable to get mountd port number from server, using defaultmount: server 192.168.167.170 not responding, timed outRoot-NFS: Server returned error -5 while mounting /work/nfs/rootfs_bluetooth_omapVFS: Unable to mount root fs via NFS, trying floppy.VFS: Cannot open root device "nfs" or unknown-block(2,0)Please append a correct "root=" boot optionKernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)问题原因:这种情况通常是nfs配置问题。确认uboot的bootargs参数里和nfs相关的ip地址信息设置是否正确,以及Host机/etc/exports配置无误,重起nfs服务,重新尝试连接。另外还需要注意bootargs内console和mem两个参数的设置。kernel2.6后console最好设置为ttySAC0,mem也要根据开发板实际情况设置正确。5.文件系统不能启动问题eth0: link upIP-Config: Complete:& && &device=eth0, addr=192.168.167.15, mask=255.255.255.0, gw=192.168.167.254,& &&&host=192.168.167.15, domain=, nis-domain=(none),& &&&bootserver=192.168.167.170, rootserver=192.168.167.170, rootpath=Looking up port of RPC
on 192.168.167.170Looking up port of RPC
on 192.168.167.170VFS: Mounted root (nfs filesystem).Freeing init memory: 128K/sbin/initKernel panic - not syncing: Attempted to kill init!问题原因:制作的文件系统缺少运行busybox所需的libcrypt.so库,新版本会有缺库提示,老版本(1.60)没有。注:运行一个busybox文件系统至少需要如下几个库:ld-linux.so.xlibc.so.6libcrypt.so.x较新版本的busybox可能还需要libm.so.6libgcc_s.so.x(x为版本号)6.文件系统不能启动问题2eth0: link upIP-Config: Complete:& && &device=eth0, addr=192.168.167.15, mask=255.255.255.0, gw=192.168.167.254,& &&&host=192.168.167.15, domain=, nis-domain=(none),& &&&bootserver=192.168.167.170, rootserver=192.168.167.170, rootpath=Looking up port of RPC
on 192.168.167.170Looking up port of RPC
on 192.168.167.170VFS: Mounted root (nfs filesystem).Freeing init memory: 128KKernel panic - not syncing: No init found.&&Try passing init= option to kernel.问题原因:对比一个可用的文件系统后发现,缺少了ld-linux.so.x库,文件系统里只有ld-linux.so.x的连接文件,少拷了库文件。8.不能获得帐户UID信息Could not get password database information for UID of current process: User "???" unknown or no memory to allocate password entry&Unknown username "root" in message bus configuration fileCould not get password database information for UID of current process: User "???" unknown or no memory to allocate password entryFailed to start message bus: Could not get UID and GID for username "root"问题原因:情况一:系统帐户验证出现问题.怀疑是调用getuid、getguid时并没有返回正确值,可能是缺少帐户验证相关库,实际排查后发现,缺少libnss_files库。拷贝交叉编译器的libnss_files库到文件系统后,启动文件系统成功。情况二:系统没有root帐号。可以由whoami命令看出。手动创建帐号。#vi /etc/passwd&root:x:0:0:root:/root:/bin/shkyo:x:500:500:kyo:/home/kyo:/bin/bash添加组#vi grouproot:x:0:root9.Freeing init memory: 128Kinit started: BusyBox v1.6.1 ( 14:33:15 CST) multi-call binarystarting pid 834, tty '': '/etc/init.d/rcS'Cannot run '/etc/init.d/rcS': No such file or directoryPlease press Enter to activate this console.&发现没有/etc/init.d/rcS文件系统一样能正常启动。看来rcS只是用来设置一些随机启动的参数,对文件能否正常运行关系不大。注:这个不是错误,是偶然发现! :)&
阅读(...) 评论()热门关键字:
嵌入式linux启动时运行的inittab文件
嵌入式系统下的linux启动配置文件,不同与普通的PC linux启动配置,启动相关文件与文件的内容也要少得多。嵌入式系统下的linux启动过程一般是:
&&& 1 在bootloader中制定各种要求传给linux内核的参数,制作ramdisk或ramfs文件系统,并在开机后首先mount上,该文件系统主要负责包含启动运行的配置文件,嵌入式系统主要是/etc/inittab和/etc/rc文件;
&&& 2 在init进程启动后,进程首先执行/etc/inittab文件,该文件语法下面介绍,一般包括三项内容就可以启动。其中主要的一项内容就是::sysinit:/etc/rc,目的是制定初始化要执行的脚本配置文件,在/etc/rc中则主要是配置系统;另一项内容是::respawn:-/usr/sbin/xxx,xxx一般为shell,最后一个重要的项是::shutdown:/bin/umount -a -r
&&& 接下来的部分为转载
首先介绍点背景知识,关于inittab的:
init进程是系统中所有进程的父进程,init进程繁衍出完成通常操作所需的子进程,这些操作包括:设置机器名、检查和安装磁盘及文件系统、启动系统日志、配置网络接口并启动网络和邮件服务,启动打印服务等。Solaris中init进程的主要任务是按照inittab文件所提供的信息创建进程,由于进行系统初始化的那些进程都由init创建,所以init进程也称为系统初始化进程。&&&&&& 下面具体说明inittab文件的格式。  inittab文件中每一记录都从新的一行开始,每个记录项最多可有512个字符,每一项的格式通常如下:id:rstate:action:process,下面分别解释。  1.id字段是最多4个字符的字符串,用来唯一标志表项。  2.rstate(run state)字段定义该记录项被调用时的运行级别,rstate可以由一个或多个运行级别构成,也可以是空,空则代表运行级别0~6。当请求init改变运行级别时,那些rstate字段中不包括新运行级别的进程将收到SIGTERM警告信号,并且最后被杀死;只有a、b、c启动的命令外(a、b、c不是真正的运行级别)  3.action字段告诉init执行的动作,即如何处理process字段指定的进程,action字段允许的值及对应的动作分别为:  &&&&&& 1)respawn:如果process字段指定的进程不存在,则启动该进程,init不等待处理结束,而是继续扫描inittab文件中的后续进程,当这样的进程终止时,init会重新启动它,如果这样的进程已存在,则什么也不做。  &&&&&& 2)wait:启动process字段指定的进程,并等到处理结束才去处理inittab中的下一记录项。  &&&&&& 3)once:启动process字段指定的进程,不等待处理结束就去处理下一记录项。当这样的进程终止时,也不再重新启动它,在进入新的运行级别时,如果这样的进程仍在运行,init也不重新启动它。  &&&&&& 4)boot:只有在系统启动时,init才处理这样的记录项,启动相应进程,并不等待处理结束就去处理下一个记录项。当这样的进程终止时,系统也不重启它。  &&&&&& 5)bootwait:系统启动后,当第一次从单用户模式进入多用户模式时处理这样的记录项,init启动这样的进程,并且等待它的处理结束,然后再进行下一个记录项的处理,当这样的进程终止时,系统也不重启它。  &&&&&& 6)powerfail:当init接到断电的信号(SIGPWR)时,处理指定的进程。  &&&&&& 7)powerwait:当init接到断电的信号(SIGPWR)时,处理指定的进程,并且等到处理结束才去检查其他的记录项。  &&&&&& 8)off:如果指定的进程正在运行,init就给它发SIGTERM警告信号,在向它发出信号SIGKILL强制其结束之前等待5秒,如果这样的进程不存在,则忽略这一项。  &&&&&& 9)ondemand:功能通respawn,不同的是,与具体的运行级别无关,只用于rstate字段是a、b、c的那些记录项。 &&&&&&&&&& 10)sysinit:指定的进程在访问控制台之前执行,这样的记录项仅用于对某些设备的初始化,目的是为了使init在这样的设备上向用户提问有关运行级别的问题,init需要等待进程运行结束后才继续。  &&&&&& 11)initdefault:指定一个默认的运行级别,只有当init一开始被调用时才扫描这一项,如果rstate字段指定了多个运行级别,其中最大的数字是默认的运行级别,如果rstate字段是空的,init认为字段是0123456,于是进入级别6,这样便陷入了一个循环,如果 inittab文件中没有包含initdefault的记录项,则在系统启动时请求用户为它指定一个初始运行级别  4.Process字段中进程可以是任意的守候进程、可执行脚本或程序。  另外:在任何时候,可以在文件inittab中添加新的记录项,级别Q/q不改变当前的运行级别,重新检查inittab文件,可以通过命令init Q或init q使init进程立即重新读取并处理文件inittab
以上这些都是介绍的标准的linux System V的标准,所以对嵌入式来讲有些东西并不见得有用!这里介绍点针对嵌入式的,也就是针对busybox init的:
busybox的init
&& 除了基本的命令之外,BusyBox还支持init功能,如同其它的init一样,busybox的init也是完成系统的初始化工作,关机前的工作等等,我们知道在Linux的内核被载入之后,机器就把控制权转交给内核,linux的内核启动之后,做了一些工作,然后找到根文件系统里面的init程序,并执行它,BusyBox的init进程会依次进行以下工作:(参考&&构建嵌入式LINUX系统&& p201)
1.&&&&&& 为init设置信号处理过程
2.&&&&&& 初始化控制台
3.&&&&&& 剖析/etc/inittab文件
4.&&&&&& 执行系统初始化命令行,缺省情况下会使用/etc/init.d/rcS
5.&&&&&& 执行所有导致init暂停的inittab命令(动作类型:wait)
6.&&&&&& 执行所有仅执行一次的inittab(动作类型:once)
一旦完成以上工作,init进程便会循环执行以下进程:
&&&&&& 1.& 执行所有终止时必须重新启动的inittab命令(动作类型:once)
&&&&&& 2.& 执行所有终止时必须重新启动但启动前必须询问用户的inittab命令(动作类型:askfirst)
&&&&&& 初始化控制台之后,BusyBox会检查/etc/inittab文件是否存在,如果此文件不存在,BusyBox会使用缺省的inittab配置,它主要为系统重引导,系统挂起以及init重启动设置缺省的动作,此外它还会为四个虚拟控制台(tty1到tty4)设置启动shell的动作。如果未建立这些设备文件,BusyBox会报错。
&&&&&& inittab文件中每一行的格式如下所示:(busybox的根目录下的example文件夹下有详尽的inittab文件范例)&&&&&
&&&&&& id:runlevel:action:process
尽管此格式与传统的Sytem V init类似,但是,id在BusyBox的init中具有不同的意义。对BusyBox而言,id用来指定启动进程的控制tty。如果所启动的进程并不是可以交互的shell,例如BusyBox的sh(ash),应该会有个控制tty,如果控制tty不存在,Busybox的sh会报错。BusyBox将会完全忽略runlevel字段,所以空着它就行了,你也许会问既然没用保留着它干吗,我想大概是为了和传统的Sytem V init保持一致的格式吧。process字段用来指定所执行程式的路径,包括命令行选项。action字段用来指定下面表中8个可应用到process的动作之一。
动作&结果&sysinit&为init提供初始化命令行的路径&respawn&每当相应的进程终止执行便会重新启动&askfirst&类似respawn,不过它的主要用途是减少系统上执行的终端应用程序的数量。它将会促使init在控制台上显示&Please press Enter to active this console&的信息,并在重新启动之前等待用户按下enter键&wait&告诉init必须等到相应的进程完成之后才能继续执行&once&仅执行相应的进程一次,而且不会等待它完成&ctratldel&当按下Ctrl+Alt+Delete组合键时,执行相应的进程&shutdown&当系统关机时,执行相应的进程&restart&当init重新启动时,执行相应的进程,通常此处所执行的进程就是init本身&
以下是我的usblinux的inittab文件
::sysinit:/etc/init.d/rcS
::respawn:/sbin/getty& 115200& tty1
tty2::askfirst:-/bin/sh
tty3::askfirst:-/bin/sh
::restart:/sbin/init
::ctrlaltdel:/bin/umount -a -r
这个inittab执行下列动作
1.&&&&&& 将/etc/init.d/rcS设置成系统的初始化文件
2.&&&&&& 在115200 bps的虚拟终端tty1上启动一个登陆会话 (注意getty的用法)
3.&&&&&& 在虚拟终端tty2和tty3上启动askfirst动作的shell
4.&&&&&& 如果init重新启动,将/sbin/init设置成它会执行的程序
5.&&&&&& 告诉init,在系统关机的时候执行umount命令卸载所有文件系统,并且在卸载失败时用只读模式冲新安装以保护文件系统。
1、busybox的inittab与pc使用的inittab不同,第一ID并不是随便取名字的,这个名字要与/dev/目录下是否有对应的文件对应
can't open /dev/0: No such file or directory
process '-/bin/sh' (pid 789) exited. Scheduling for restart.
can't open /dev/0: No such file or directory
process '-/bin/sh' (pid 793) exited. Scheduling for restart.
2、出现下面这种错误:
process '-/bin/sh' (pid 789) exited. Scheduling for restart.
process '-/bin/sh' (pid 794) exited. Scheduling for restart.
process '-/bin/sh' (pid 796) exited. Scheduling for restart.
process '-/bin/sh' (pid 798) exited. Scheduling for restart.
对应的inittab文件中有
ttyS0::askfirst:-/bin/sh
虽然在/dev/目录下有ttyS0设备,但是这个设备显然不可用,所以才会出现上面的错误
3、当在inittab中同时定义的两个在同一个串口终端登陆的语句时
::askfirst:-/bin/sh
s3c2410_serial0:23456:respawn:/sbin/getty -L s3c2410_serial0 115200 vt100
出现的情况就是被抢占,不能接收任何串口输入
4、bad inittab entry
多半时因为非法字符造成的。
5、busybox中的字段runleve也没有运行时的运行级别的概念
6、分析一下启动的过程
1.&&&&&& 为init设置信号处理过程
2.&&&&&& 初始化控制台
3.&&&&&& 剖析/etc/inittab文件
4.&&&&&& 执行系统初始化命令行,缺省情况下会使用/etc/init.d/rcS
5.&&&&&& 执行所有导致init暂停的inittab命令(动作类型:wait)
6.&&&&&& 执行所有仅执行一次的inittab(动作类型:once)
一旦完成以上工作,init进程便会循环执行以下进程:
&&&&&& 1.& 执行所有终止时必须重新启动的inittab命令(动作类型:once)
&&&&&& 2.& 执行所有终止时必须重新启动但启动前必须询问用户的inittab命令(动作类型:askfirst)
&&&&&& 初始化控制台之后,BusyBox会检查/etc/inittab文件是否存在,如果此文件不存在,BusyBox会使用缺省的inittab配置,它主要为系统重引导,系统挂起以及init重启动设置缺省的动作,此外它还会为四个虚拟控制台(tty1到tty4)设置启动shell的动作。如果未建立这些设备文件,BusyBox会报错。
7、网上有人问&-&的作用
我很纳闷::: respawn:-/bin/sh这个-是干什么的,为什么有的时候有有的时候没有???还有啊,我从网上看到一个例程,如下,节选:::respawn:-/bin/shtty2::askfirst:-/bin/sh我搞不清两个的区别,这样控制台就启动了,是第一句启动的还是第二句,那我内核启动参数里面的console=ttyS0会自动来找这个控制台???
原帖由 wavezone 于
16:34 发表&我很纳闷::: respawn:-/bin/sh这个-是干什么的,为什么有的时候有有的时候没有???还有啊,我从网上看到一个例程,如下,节选:::respawn:-/bin/shtty2::askfirst:-/bin/sh我搞不清两个的区别 ...
测试的时候是这样的,加上&-&的语句会在登陆终端之后调用/etc/目录下的profile文件,而不加&-&的不会执行这个脚本。
其实登陆终端的命令有几种方便,但是标准的还是使用getty来登陆,但是直接使用如上的语句也是可以的,并且兼容性强一点,因为它不需要指定对应的串口设备。
::askfirst:-/bin/sh
s3c2410_serial0::askfirst:-/bin/sh
::askfirst:-/bin/sh
s3c2410_serial0:23456:respawn:/sbin/getty -L s3c2410_serial0 115200 vt100
都是可用的。
&8./bin/sh: XXX not foundarm-linux-readelf -d xxx查看你的以用程序依赖哪些库一般是因为缺少libc.so.6造成的,实际还是根文件系统的问题,没有将常用的库文件拷贝到/lib目录下常用的库:
[root@centos lib]cp /usr/local/arm/3.4.1/arm-linux/lib/ld* .
[root@centos lib]cp /usr/local/arm/3.4.1/arm-linux/lib/libc-2.3.2.so .
[root@centos lib]cp /usr/local/arm/3.4.1/arm-linux/lib/libc.so.6 .
[root@centos lib]cp /usr/local/arm/3.4.1/arm-linux/lib/libm * .
[root@centos lib]cp /usr/local/arm/3.4.1/arm-linux/lib/libcrypt* .
9、错误insmod: chdir(2.6.26.6): No such file or directory
网上有人提出这种解决方法:
需要注意的是insmod等模块加载命令需要从lib/modules/2.6.26.6
的目录下加载模块,所以必须先建立此目录,然后将模块放到此目录下面,否则将出现以下两种情况:
一是没有建立lib/modules/2.6.26.6目录,取决于内核版本号,将出现insmod: chdir(2.6.26.6): No such file or directory的错误
二是只将模块简单地放在根目录或其它文件夹,没有将其拷贝到指定的lib/modules/2.6.26.6目录,将出现
insmod: module 'gpio_driver' not found错误
不过这种方法不是很奏效
根本原因是insmod的问题,在busybox编译的时候参考下面的选项,不要使用
Linux Module Utilities ---&
& [ ] Simplified modutils
//该选项不要选择
[*] Support version 2.6.x Linux kernels&
//此选项选上
参考如下:
10、不能执行&-h&命令
在执行xxx &h时没有任何反应。是在lib目录下缺少常见的库文件
参考如下:
[root@vm-dev rootfs]# ls lib/
ld-2.3.6.so&&&&&&&&&&&&&& libc-2.3.6.so&&&&& libgcc_s.so&&&&& libnsl.so.1&&&&&&&&&&&& libnss_files.so.2&&&&&&& libnss_nis.so.2&&&& librt-2.3.6.so&&&&&& libthread_db.so.1
ld-linux.so.2&&&&&&&&&&&& libcrypt-2.3.6.so& libgcc_s.so.1&&& libnss_compat-2.3.6.so& libnss_hesiod-2.3.6.so&& libpcprofile.so&&&& librt.so.1&&&&&&&&&& libutil-2.3.6.so
libanl-2.3.6.so&&&&&&&&&& libcrypt.so.1&&&&& libm-2.3.6.so&&& libnss_compat.so.2&&&&& libnss_hesiod.so.2&&&&&& libpthread-0.10.so& libSegFault.so&&&&&& libutil.so.1
libanl.so.1&&&&&&&&&&&&&& libc.so.6&&&&&&&&& libmemusage.so&& libnss_dns-2.3.6.so&&&& libnss_nis-2.3.6.so&&&&& libpthread.so.0&&&& libtermcap.so.2&&&&& modules
libBrokenLocale-2.3.6.so& libdl-2.3.6.so&&&& libm.so.6 &libnss_dns.so.2&&&&&&&& libnss_nisplus-2.3.6.so& libresolv-2.3.6.so& libtermcap.so.2.0.8
libBrokenLocale.so.1&&&&& libdl.so.2&&&&&&&& libnsl-2.3.6.so& libnss_files-2.3.6.so&& libnss_nisplus.so.2&&&&& libresolv.so.2&&&&& libthread_db-1.0.so
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
嵌入式linux中文站
用微信扫一扫关注我们
随时获取最新开源资讯}

我要回帖

更多关于 linux 开机 不用登录 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信