linux怎么把一个正在前台运行的进程用nohup放入后台运行
假设进程在控制台运行。 三个步骤: ctrl + z 停止正在运行的进程 $ bg 命令把该进程放入后台 disown -h [job的序号] 后台的进程有类似%1, %2, %3的序号。 至此,一个正在控制台前台运行进程被放入后台,且忽略SIGHUP信号。这样,即使关闭了控制台,也不会杀死这个进程了。
假设进程在控制台运行。 三个步骤: ctrl + z 停止正在运行的进程 $ bg 命令把该进程放入后台 disown -h [job的序号] 后台的进程有类似%1, %2, %3的序号。 至此,一个正在控制台前台运行进程被放入后台,且忽略SIGHUP信号。这样,即使关闭了控制台,也不会杀死这个进程了。
今天工作上碰到一个问题需要知道udp的丢包数据。实际上我不相信能简单地得到udp的丢包精确数据。理由是,网卡负载太高时有些包连网卡都没收到,根本不可能来得及汇报给内核。另外,如果是路由器把udp丢了,那udp的目的端机器当然更不可能感知到有丢包了。 这时,同事说netstat -us (–statistic)可以看到udp的丢包。这里的u选项指的是只展示udp相关的统计,s选项自然表示的是统计了。如果不用u选项,则出显示所有统计数据。下面是我的机器上的输出。 Ip: 203440255187 total packets received 0 forwarded 0 incoming packets discarded 201612429535 incoming packets delivered 1064529177 requests sent out 15 fragments dropped after timeout 3058122492 reassemblies required 1230296840 packets reassembled ok 15 packet reassembles failed Icmp: 14869220 ICMP messages received 3965512 input ICMP message failed. ICMP input histogram: destination unreachable: 6054246 timeout in transit: 687 echo requests: 8570532 echo replies: 243755 12913011 ICMP messages sent 0 ICMP messages failed ICMP output histogram: destination unreachable: 4097869 time exceeded: 5 echo request: 244605 echo replies: 8570532 IcmpMsg: InType0: 243755 InType3: 6054246 InType8: 8570532 InType11: 687 OutType0: 8570532 OutType3: 4097869 OutType8: 244605 OutType11: 5 Tcp: 111681768 active connections openings 4186820 passive connection openings 24951865 failed connection attempts 55064041 connection resets received 275 connections established 1033901799 segments received 1776166765 segments send out 12156205 segments retransmited 6705 bad segments received. 106348033 resets sent Udp: 198894689917 packets received 472986510 packets to unknown port received. 1146976531 packet receive errors 116750744 packets sent 110301286 receive buffer errors 0 send buffer errors UdpLite: TcpExt: 423 invalid SYN cookies received 693 packets pruned from receive queue because of socket buffer overrun 19 packets pruned from receive queue 11309370 TCP sockets finished time wait in fast timer 106 packets rejects in established connections because of timestamp 10210477 delayed acks sent 20811 delayed acks further delayed because of locked socket Quick ack mode was activated 8856 times 17118697 packets directly queued to recvmsg prequeue. 301717551 bytes directly in process context from backlog 152118951904 bytes directly received in process context from prequeue 104771733 packet headers predicted 15179703 packets header predicted and directly queued to user 218747377 acknowledgments not containing data payload received 102637644 predicted acknowledgments 7293 times recovered from packet loss by selective acknowledgements Detected reordering 40 times using FACK Detected reordering 27 times using SACK Detected reordering 1088 times using time stamp 476 congestion windows fully recovered without slow start 5287 congestion windows partially recovered using Hoe heuristic 236 congestion windows recovered without slow start by DSACK 151673 congestion windows recovered without slow start after partial ack 1 timeouts after reno fast retransmit 4 timeouts after SACK recovery 10540 timeouts in loss state 7232 fast retransmits 649 forward retransmits 1871 retransmits in slow start 11612658 other TCP timeouts TCPLossProbes: 93185 TCPLossProbeRecovery: 14667 2431 packets collapsed in receive queue due to low socket buffer 8814 DSACKs sent for old packets 3350 DSACKs received 1 DSACKs for out of order packets received 90851 connections reset due to unexpected data 214 connections reset due to early user close 352 connections aborted due to timeout TCPDSACKIgnoredNoUndo: 1571 TCPSpuriousRTOs: 7 TCPSackShifted: 94 TCPSackMerged: 131 TCPSackShiftFallback: 21183 TCPTimeWaitOverflow: 1876775 TCPRcvCoalesce: 15711184 TCPOFOQueue: 3194 TCPChallengeACK: 2337394 TCPSYNChallenge: 13608 TCPSpuriousRtxHostQueues: 1982796 IpExt: InBcastPkts: 46443933 InOctets: 44312451521655 OutOctets: 1915626725817 InBcastOctets: 6827280595 喂,要是转载文章。麻烦贴一下出处 ykyi.net 采集爬虫把链接也抓走 ...
如何增加Linux系统最大文件打开数目呢? 查看系统最大可打开文件数 以下命令查看操作系统级最多可打开文件数,fd数目 $ cat /proc/sys/fs/file-max 我用ubuntu 16输出: 573738 怎么调整系统最大可打开文件数 # sysctl -w fs.file-max=1000000 需要用root用户执行以上命令,设最大为一百万。 但在命令行上修改了这个配置,会在下一次操作系统重启后重置为以前的值。要一劳永逸的改变系统最大打开文件数,需要修改 /etc/sysctl.conf 文件。 fs.file-max = 1000000 在/etc/sysctl.conf文件中增加上述一行。 ulimit命令查看/调整进程级最大文件打开数 $ ulimit -Sn 1024 这个命令查看一个ulimit的软极限值(soft limit),本用户起的进程的最大文件打开数的限制。我的ubuntu 16显示进程最多开1024个fd。如果要提高每个进程可同时打开的文件数,需要更改这个值。 $ ulimit -Sn 2048 bash: ulimit: open files: cannot modify limit: Invalid argument 但我想把每个进程可同时打开的文件数增加到以前的两倍时,报错了。这是因为,软极限值(soft limit)不能够越过(Hard Limit)。我看了一下Hard limit,也是1024 $ ulimit -Hn 1024 那没办法罗,需要以root用户登录更改Hard Limit。 怎么修改普通用户的硬极限hard Limit 用root账户登录后,编辑 /etc/security/limits.conf文件,假如普通用户名是kamuszhou。 kamuszhou hard nofile 10000 kamuszhou soft nofile 5000 以上配置修改kamuszhou普通用户的最多打开文件数的hard limit为10000,soft limit为5000。 对于ubuntu 16,如果使用图形桌面,还需要修改 /etc/systemd/system.conf 和 /etc/systemd/user.conf。 加上这么一行: ...
几天前和同事吃饭,谈论到一个问题:linux从什么时候开始支持线程。他说linux中的线程出现的很晚,直到2.2.x才有。 我觉得不对啊,怎么会那么晚。然后它用手机搜索了一下,linux对POSIX线程库的支持确实很晚,直到2.6.x才有。 但我觉得POSIX线程库只不过是用户空间用来创建线程的接口,并不能证明那么晚linux才支持线程。 后来用PC的时候搜索了一下,在The Linux Document Project的官方网站找到了答案: http://www.tldp.org/FAQ/Threads-FAQ/Support.html Does Linux support threads? Yes. As of 1.3.56, Linux has supported kernel-space multithreading. There also have been user-space thread libraries around as early as 1.0.9. There is on-going effort to refine and make the kernel more reentrant. With the introduction of 2.1.x, the memory space is being revised so that the kernel can access the user memory more quickly. ...
virtualBox开机挂载windows分区,并把光盘镜源设为源。 设置fstab文件。把windows的d,e,f盘分别开机挂载到了/misc/d /misc/e /misc/f 。/misc是自建的目录,是miscellany的缩写。 # cat /etc/fstab # /etc/fstab: static file system information. # Use ‘blkid’ to print the universally unique identifier for a # device; this may be used with UUID= as a more robust way to name devices # that works even if disks are added and removed. See fstab(5). # # / was on /dev/sda1 during installation UUID=590c2b64-87b7-4f92-b32f-7133139be772 / ext4 errors=remount-ro 0 1 # swap was on /dev/sda5 during installation UUID=1e4e1188-d057-4210-99e7-6f2d1529db80 none swap sw 0 0 /dev/sr0 /media/cdrom0 udf,iso9660 user,noauto 0 0 D_DRIVE /misc/d vboxsf rw,auto 0 0 0 E_DRIVE /misc/e vboxsf rw,auto 0 0 0 F_DRIVE /misc/f vboxsf rw,auto 0 0 0 /misc/d/debian_ios/debian-7.1.0-amd64-DVD-1.iso /misc/a_iso udf,iso9660 user,loop,auto 0 0 /misc/d/debian_ios/debian-7.1.0-amd64-DVD-2.iso /misc/b_iso udf,iso9660 user,loop,auto 0 0 /misc/d/debian_ios/debian-7.1.0-amd64-DVD-3.iso /misc/c_iso udf,iso9660 user,loop,auto 0 0 ...
把我的毕业论文放上来,直接从word复制,所以图片会丢失。 在这里可以下载原稿 www.ykyi.net/upload/Research_and_Implementation_of_Memory_Deduplication_in_the_Linux_Desktop_Environment.pdf 中山大学硕士学位论文 Linux桌面环境下内存去重技术的. based on KSM 研究与实现 Research and Implementation of Memory Deduplication in The Linux Desktop Environment 学位申请人: <td style="width:160px;"> <p> 周霄 </p> </td> 导师姓名及职称: <td style="width:160px;"> <p> 王常吉副教授 </p> </td> 论文原创性声明 本人郑重声明:所呈交的学位论文,是本人在导师的指导下,独立进行研究工作所取得的成果。除文中已经注明引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写过的作品成果。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。本人完全意识到本声明的法律结果由本人承担。 学位论文作者签名: 日期: 年 月 日 学位论文使用授权声明 本人完全了解中山大学有关保留、使用学位论文的规定,即:学校有权保留学位论文并向国家主管部门或其指定机构送交论文的电子版和纸质版;有权将学位论文用于非赢利目的的少量复制并允许论文进入学校图书馆、院系资料室被查阅;有权将学位论文的内容编入有关数据库进行检索;可以采用复印、缩印或其他方法保存学位论文;可以为存在馆际合作关系的兄弟高校用户提供文献传递服务和交换服务。 保密论文保密期满后,适用本声明。 学位论文作者签名: 导师签名: 日期: 年 月 日 日期: 年 月 日 论文题目: Linux桌面环境下内存去重技术的研究与实现 专业:软件工程 硕士生:周霄 指导教师:王常吉 摘 要 内存管理是操作系统中至关重要的部分。优秀的操作系统高效地管理有限的内存资源。Linux内核的内核同页合并(KSM)模块是在虚拟化兴起后为节省虚拟机使用的内存而发展的一种节约内存的技术。KSM通过合并相同内容页面的方式显著地降低了多个基于内核虚拟机(KVM)技术的虚拟机同时运行时系统使用的内存。实际上,KSM也能合并一般应用程序中的相同内容页面。但一般应用程序为了使用KSM技术合并内存,需要在源代码级别显式地调用相应的系统调用来告知KSM需要扫描的内存区域。对于一般用户来说,需要修改应用程序的源代码显然是一个太高的门槛。 本论文在认真研究了KSM模块的实现的基础上,增强了KSM的功能。新设计实现的KSM+使得用户可以不必修改应用程序的源代码就能利用KSM+合并相同内容的内存页面。另外原来的KSM算法依赖程序指定的内存区域有大量的重复内存页面,而实际上,一般应用程序并没有大量的重复内存。在重复内存非常少的情况下,对这些程序应用KSM技术非但不能降低内存使用,而且因为运行KSM本身所需内存而增加了内存开销。本论文针对这一点在KSM的算法上做了改进,减少了运行KSM+算法本身所消耗的内存。然后论文用Linux桌面下的常用应用程序验证了KSM+的实际效果,并构造了一个实验比较了KSM和KSM+。最后,为了了解应用程序的重复内存页面的特点,还编写了专门统计重复页面的内核模块,发现应用程序的重复页面的一些规律,为持续改进KSM+提供了依据。 关键词:KSM,重复内存合并 ,内存管理 Title: Research and Implementation of Memory Deduplication in The Linux Desktop Environment Major: Software Engineering Name: Zhou Xiao Supervisor: Wang Changji Abstract Memory management is one of the most important parts of the operating system. KSM (Kernel Samepage Merging) in Linux kernel is a kind of memory saving technology developed after the emerging of virtual machine. KSM can dramatically decrease the memory usage of the hypervisor running several virtual machines. Actually, KSM can also be applied to normal applications. But in order to use the KSM, application must explicitly evoke a system call in source code level to tell KSM the memory area where the KSM will scan. To normal users, modifying the source code is impossible at most of the time. Base on the full grasp of the implementation of KSM, a new implementation named KSM+ is created, which allows users to merge same-content pages on the specified applications without modifying corresponding source code. Moreover, the original KSM algorithm relies heavily on the specified area is rich in same-content pages, while normal applications have much less same-content pages compared to virtual machines. So, when KSM is applied to those applications, it is possible that memory usage will rise rather than decrease. To combat with this situation, KSM+ employs a new algorithm to decrease the memory usage for running itself. Several experiments prove that the KSM+ can be easily applied to specified applications and memory usage can be reduced. And a case is designed to compare the effect between KSM and KSM+, which shows KSM+ behaves better in deduplication when the same-content pages’ density is very low. At last, in order to inspect the characteristics of same-content pages from normal desktop applications, an ad-hoc kernel module is developed to do the statistics which supplies significant data for the further development of KSM+. Key Words: KSM, Deduplication, Memory Management ...
epoll学习报告 kamuszhou 周霄 Jul/26/2013 这几天通读了内核中对epoll I/O模型的实现代码,结合网络上很多介绍epoll的文章,对epoll的实现原理已经很熟悉,下面谈谈我的几点体会。下文引用的内核代码来自3.9.6版本的内核,见URL:http://lxr.oss.org.cn/source/fs/eventpoll.c。 一. epoll的边沿触发(ET)的效率高于电平(LT)触发的效率 首先简单介绍一个背景:epoll实现中,把已经有事件发生的文件用一个双链表链接一起,这个双链表是在struct eventpoll结构中的rdllist域。用户空间调用epoll_wait(),陷入内核后就会立即检查这个双链表,如果链表中非空,就通过文件的poll()函数询问文件有无事件发生。如果有事件发生且是用户关心的,就会向用户空间报告,否则就睡眠。 epoll的实现代码中实际上只有两行代码与触发方式有关,如下图所示。 上图所示的代码运行的上下文情况是:用户加入到epoll中的某个文件,只要支持poll(),(可以是socket,FIFO,裸设备,whatever)有关心的事件到达(或可读,或可写,或报错),内核空间已经把发生的事件复制到了用户空间,但还没有从内核态返回用户空间。在返回用户空间之前代码检查用被epoll监视的这个文件是否是ET触发,如果不是(那就是LT),就把监视的文件重新放回就绪队列,下次epoll_wait()调用的时候会立即重新检查这个文件有否有事件到达。如果这文件的确有事件发生,则epoll_wait()报告给调用者。如果没有,而且其它被监视的文件也没有事件发生,则调用epoll_wait()的task就让出处理器,开始睡觉(TASK_INTERRUPTIBLE)。这段逻辑在static int ep_poll(struct eventpoll *ep, struct epoll_event __user *events, int maxevents, long timeout)中,第1494行。 如果监听的文件开启的是边沿触发(默认),则不会执行上图中的list_add_tail()逻辑。这就是边沿触发只会向用户报告一次,直到下一个关心事件发生才向用户空间报告的原因。 那么为什么ET触发效率高于LT触发呢?看一个例子,假如客户端监视一个TCP的Socket,服务端这时发来1M数据,客户端的主机网卡驱动缓存足够大,一次性接收到了所有1M数据。下面看两段客户端的接收伪代码(没有写read调用返回时socket被关闭的情况;另socket描述符fd被设为非阻塞)。 上图的代码使用了LT触发,这段代码依赖epoll_wait()通知还有数据可供读取。所以共调用了1024次epoll_wait(),1024次read(),共2048次系统调用才读完1M数据。 上图使用ET触发,epoll_wait()只报告一次,然后代码循环调用1024次read()读完数据,直到第1025次read()返回-1,出错码为EAGAIN(EAGAIN等于EWOULDBLOCK),于是代码知道已经接收完数据。一共只使用了1026次系统调用就读完了数据。 总结:即使使用电平触发也不要依赖epoll_wait()通知调用者到达事件,需要循环调用IO函数直到被通知EAGAIN,这样就把epoll_wait()的调用次数降到最低,仅管有可能在下次epoll_wait()时会有可能浪费一次文件的poll()调用,但这个很小的开销可以忽略。 二. 为什么epoll支持嵌套调用 读epoll的实现代码发现,一个epoll的文件描述符epfd可以嵌套的加入另一个epoll。这样有什么用呢? epoll的实现中“平等的”对待每个被监视的文件,它们维护在一棵红黑树之中,假如有十万个文件被监视,那么查找某个文件时就要在这十万个文件中查找。即使红黑树的查找效率是log(n),文件非常大时也是比较消耗时间的。 那么假如有这样一种情况,如果这十万个文件中只有1000个是活跃的,或者说这1000个文件优先级最高。那么则有一种优化方案是,创建两个epoll,第一个epoll(epfd0)监控100000 – 1000 个文件,第二个epoll (epfd1) 监控1000个高优先级文件以及epfd0。这样的好处是,大多数情况下epoll实现只在1001个元素的红黑树中查找,自然效率提高了。 总结:epoll的嵌套调用给开发者提供了一个在高并发环境下的优化方案。 三. epoll的效率一定比select/poll高吗。 答案是不一定。 Select的缺点大致有: 1. 内核中写死了最多只能监视1024个文件. 2. 每次调用select都要把关心的文件描述符和关心的文件件从一个用户空间的长长的数组拷贝到内核空间. 3. select若使得caller进程进入睡眠后,某个文件有事件到达此进程被唤醒,那么所有被监视的文件全部会被调用poll()询问“你有没有事件到达”,这是一个线性的时间复杂度。 epoll针对select的三个缺点的改进: 1. 监视的文件数由取决于系统中有多少低端内存(x86_64架构中的所有内存都是低端内存)。3.9.6版本的内核实现中,对于每个登录用户,最多使用系统中低端内存的4%用来创建监视用的数据结构。见第1951行代码。max_user_watches = (((si.totalram – si.totalhigh) / 25) << PAGE_SHIFT) / EP_ITEM_COST; 2. 用户只需要把关心的文件对应的数据结构在调用epoll_wait()前用epoll_ctl()一次性传入内存,以后调用epoll_wait()时不需要像select一样拷贝大量数据。 3. 当调用epoll_wait()的caller进程睡眠时,突然有事件到达,caller进程被唤醒,epoll_wait()返回用户空间,内核并不遍历没有监视的文件,而只报告在一个即短时间内发生的事件。下面更详细的描述这个场景,以监视tcp socket举例,大致是:某进程调用epoll_wait(),此时没有任何它关心的事件发生,于是caller进程进入睡眠。处理器调度了其它进程。数据到达时,当前进程被硬件中断,网卡驱动收到数据包,数据包在中断处理函数中被拷入内核,中断处理函数设置中断下半部(Half Bottom)。下半部被处理器调度,调用epoll实现代码注册的回调函数ep_poll_callback()。ep_poll_callback()函数唤醒之前的caller进程,caller进程重新获得CPU,从epoll实现的ep_poll()函数中恢复执行,在3.9.6内核中的第1564行: if (!schedule_hrtimeout_range(to, slack, HRTIMER_MODE_ABS))。然后,内核代码开始收集已经就绪的文件和发生的事件,发回用户空间。只有从第一次回调函数ep_poll_callback()被驱动的代码调用(caller进程还在睡眠时执行的ep_poll_callback()算第一次)到epoll实现代码走到第586行关闭中断关闭中断的代码 spin_lock_irqsave(&ep->lock, flags);之间发生的事件才会被收集。 对于第3点,这是epoll的优点,但在某种情况下却会是epoll的缺点。网上很多比较poll, select, epoll性能的文章,没来得及仔细看,我个人认为结论是可靠的。结论引入了一个概念active-to-total ratio,设所有被监控的文件数是n,活跃的文件数是m,active-to-total比则是m/n,如果这个比非常高,比如大于0.7,则poll或select的性能要高过epoll,反之则epoll胜出。 对比前文对select的第3个缺点和epoll的改进点3的叙述可以解释这个原因。因为select在返回用户空间前又轮循了所有关心的文件,而这些文件又大部分是有事件发生的,所以select所做的工作并没有浪费,但epoll只收集了一小段时间中发生的事件,于是select较之epoll减少了用户空间和内核空间的频繁切换,从而让select的性能反超epoll。 那么如何改进呢?明白了以上的原因,那么就可以对epoll做出改进,理论上对于active-to-total比较高的应用环境下,可以在epoll的实现中加入与select做法相同逻辑,即退出前询问所有的监控文件,反正active-to-total比很高。或者更好的方案,用一个链表链接活跃的文件,在epoll返回用户空间前遍历这个链表,争取每一个epoll_wait()调用返回尽可能多的事件。 附:epoll的主要数据结构简介. epoll接口的主要数据结构有struct eventpoll,struct epitem,struct eppoll_entry。 在讲述这三个数据结构前先提一下struct file。Unix设计初期希望它的设计遵从“一切皆文件”的理念。在Linux内核中,每个抽象的文件对应一个内核struct file结构体。Struct file结构体中有一个void *private_data域。不同的文件类型会在private_data域中存放特定的信息。Struct file中另一个域f_op是函数指针的列表,它记录了对应该文件的操作。所有epoll文件的f_op都指向static const struct file_operations eventpoll_fops,因此可以代码判断一个文件是不是epoll如下: static inline int is_file_epoll(struct file *f) { return f->f_op == &eventpoll_fops; } 每次成功调用epoll_create时就会创建一个struct file的结构体,和一个struct eventpoll。Struct file中的private_data指向struct eventpoll。eventpoll维护了这个epoll的重要信息。其中比较重要的几个字段有:一个循环列表struct list_head rdllist链接了该epll中已经可以读写或者有出错的文件描述符。一个红黑树的根结点struct rb_root rbr,eventpoll维护了一棵红黑树,树中的结点是struct epitem。 每个被加入到epoll中被关注的文件描述符都对应一个struct epitem结构体。所有加入到同一个epoll中对应的所有epitem都挂在红黑树上。该红黑树的根结构保存在struct eventpoll中。epitem中记录了对应的文件的文件描述符和文件指针。 struct eppoll_entry是用来挂接到设备文件中的结构体。设备驱动在得知自己可读或可写或有错误时通过这个结构体通知有事件发生。每个eppoll_entry都指向一个epitem,一个epitem可能对应多个eppoll_entry。eppoll_entry中的域wait_queue_t wait就是被用来挂接到设备文件中的等待队列。设备文件通过wait可以拿到eppoll_entry,再通过eppoll_entry拿到epitem,再拿到eventpoll。
Debian的dpkg的一些用法 <p> </p></p> 1. 查看当前系统中的软件信息(dpkg -l) "dpkg -l"命令用于查看当前系统中所有deb的软件包信息;通过"dpkg -l"命令与less和grep命令配合使用,可以实现更复杂的软件包信息查询功能。 debian:~/Desktop# dpkg -l 期望状态=未知(u)/安装(i)/删除(r )/清除(p)/保持(h) | 当前状态=未(n)/已安装(i)/仅存配置(c )/仅解压缩(U)/配置失败(F)/不完全安装(H) |/ 错误?=(无)/保持(?)/须重装(R )/两者兼有(#) (状态,错误:大写=故障) ||/ 名称 版本 简介 ...
今天写内核代码时要写一个比较两个页框(Page Frame)的函数,想到用内联汇编来写这个功能。下面是代码: long cmp_x64(void *s1, void *s2, size_t n) { size_t num = n / 8; register long res; __asm__ __volatile__ ( “testq %3,%3\n\t” ; 测试num是不是0 “repe cmpsq\n\t” ; 不停地比较直到cx寄存器为0或比较到差别 “je 1f\n\t” ; 两块内存相等,跳出,返回0. “sbbq %0,%0\n\t” ; sbb是x86的减法指令,会额外地减去CF(借位)的值,这样%0就会是0或者-1 “orq $1,%0\n” ; 把立即数1或到%0上,这样%0就会是1或者-1. “1:” : “=&a”(res) ; 传入变量res放入寄存器ax,且这个变量是输出值(=),不要与其它输入输出共用寄存器(&) : “0”(res), “S”(s1), “D”(s2), “c”(num) ; 输入列表 : “cc”); // clobber list 告诉gcc在这段内联汇编中哪些寄存器被显式/隐式修改.If our instruction can alter the condition code register, we have to add “cc” to the list of clobbered registers. ...
我的debian一般把LC_ALL设成en_US.UTF-8。这次dpkg-reconfigure locales时没有选美国英语,而是用了香港英语。于是就出错了。 解决方法的关键在于 /etc/environment 文件, dpkg-reconfigure locales 命令用来配置local,以及locale命令列出当前期待的locale,还有 local-gen 命令可以生成local. debian报得错误类似于: perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LANGUAGE = “en_US:en”, LC_ALL = (unset), LANG = “en_US” are supported and installed on your system. //////////// 另外今天还解决了编译内核后,用新内核启动时报错: kernel panic – not syncing VFS: unable to mount root fs on unknown block (0, 0) // 通常这是因为对应文件系统被编译成模块,那么就应该生成initrd加载对应的文件驱动模块。在debian下,用update-initramfs 命令生成对应的initrd. 如: update-initramfs -c -k 3.0.63