关于获取IP联网:配置文件里要onboot=yes,添加物理地址,添加IP地址,重启网络服务service networking restart,
虚拟机编缉--》虚拟网络编辑与linux设定IP改为同一网段
只能单向ping通,打开网络和共享中心-->更改高级共享-->打开文件共享
想联外网,设为BOOTRPOTO=dhcp,不能写网关
在此要强调一点的是,直接修改/etc/resolv.conf这个文件是没用的,网络服务重启以后会根据/etc/sysconfig /network-scripts/ifcfg-eth0来重载配置,
如果ifcfg-eth0没有配置DNS,那么resolv.conf会被冲掉,重 新变成空值,所以在ifcfg-eth0里就写好dns,有时还要在桌面系统设置里也要写dns
很多时候linux重启网络服务后,ip地址没有改变,是因为虚拟机网络设置里(比如NAT模式)的网段没有改过来对应新的IP,改正后,再重启网络服务,ip就改变了
三种模式切换后,最好重启一下网络服务。
http://www.linuxidc.com/Linux/2016-09/135521.htm三种连接方式
http://www.linuxidc.com/Linux/2016-09/135521p3.htm
http://www.cnblogs.com/flyfish919/p/7083523.html(NAT设置静态IP上网)
1,NAT方式(network address translation),虚拟机与主机(虚拟网卡VMnet8)不在同一网段,导致虚拟机能ping通主机,但主机不能ping通虚拟机。
要想ping通主机物理网卡,1,要保证linux和物理网卡(不是VMnet8)的网段不同,2,首先设置虚拟机网络编辑器里NAT模式的网关要和物理网卡不同,同时设置linux里的
interfaces里的网关和NAT模式的网关(网络编辑器里NAT设置查看)一样(很重要,尤其静态IP上网)。IP地址在网络编辑器里DHCP设置里查看
2,网桥方式(校园网要在虚拟机网页登陆才能上网,别忘了),虚拟机与主机(虚拟机设置里,虚拟机选择连接的主机的网卡)一定要在同一网段,不然ping不通,虚拟机地址与虚拟机选择的网卡的网段一样很重要。
在桥接模式下,虚拟机ip地址需要与主机在同一个网段,如果需要联网,则网关与DNS需要与主机网卡一致,而且DNS要和主机网卡一样(网关好像不一样也可以,只需重启网络服务即可)
ping不通网关说明网络配置有问题 ping不通域名说明dns有问题,网络服务重启失败,可能是因为开了static的原因,换成dhcp,重启成功后,
再换成static,再重启网络
配置samba时,如果不行,注意关闭防火墙,或者把samba加入防火墙规则(firewall-cmd --permanent --zone=public --add-service=samba)
firewall-cmd --reload
1)
sudo apt-get update
(更新软件源)执行安装操作,如果不成功,执行2
2)
sudo apt-get upgrade
(继续更新软件源)执行安装操作,应该能成功
最后执行sudo apt-get install -y openssh-server
3
makefile中编绎aa.c生成aa.o时,要加-c如aa.o:aa.c
gcc -c aa.c -o aa.o或者gcc -c aa.c否则报错。
makefile中只要make看到一个[.o]文件,它就会自动的把[.c]文件加在依赖关系中,如果make找到一个whatever.o,那么whatever.c
就会是whatever.o的依赖文件。并且 cc -c whatever.c 也会被推导出来,于是,我们的makefile再也不用写得这么复杂
4
当然,你可以使用别的文件名来书写Makefile,比如:“Make.Linux”,“Make.Solaris”,“Make.AIX”等,
如果要指定特定的Makefile,你可以使用make的“-f”和“--file”参数,如:make -f Make.Linux或make --file Make.AIX。
5
make中的另一种用变量来定义变量的方法。这种方法使用的是“:=”操作符,前面的变量不能使用后面的变量,只能使用前面已定义好了的变量
6
用memset对非字符型数组赋初值是不可取的,因为是以字节为单位写值的
void *memset(void *s, int ch, size_t n);
函数解释:将s中当前位置后面的n个字节 (typedef unsigned int size_t )用 ch 替换并返回 s 。
memset:作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法
7,vfork用于创建一个新进程,而该新进程的目的是exec一个新进程,vfork和fork一样都创建一个子进程,但是它并
不将父进程的地址空间完全复制到子进程中,不会复制页表。因为子进程会立即调用exec,于是也就不会存放该地址空间。
不过在子进程中调用exec或exit之前,他在父进程的空间中运行。
为什么会有vfork,因为以前的fork当它创建一个子进程时,将会创建一个新的地址空间,并且拷贝父进程的资源,
而往往在子进程中会执行exec调用,这样,前面的拷贝工作就是白费力气了,这种情况下,聪明的人就想出了vfork,
它产生的子进程刚开始暂时与父进程共享地址空间(其实就是线程的概念了),
因为这时候子进程在父进程的地址空间中运行,所以子进程不能进行写操作,并且在儿子“霸占”着老子的房子时候
,要委屈老子一下了,让他在外面歇着(阻塞),一旦儿子执行了exec或者exit后,相当于儿子买了自己的房子了,
这时候就相当于分家了。
vfork和fork之间的另一个区别是: vfork保证子进程先运行,在她调用exec或exit之后父进程才可能被调度运行。
如果在调用这两个函数之前子进程依赖于父进程的进一步动作,则会导致死锁。
由此可见,这个系统调用是用来启动一个新的应用程序。其次,子进程在vfork()返回后直接运行在父进程的栈空间,
并使用父进程的内存和数据。这意味着子进程可能破坏父进程的数据结构或栈,造成失败。
为了避免这些问题,需要确保一旦调用vfork(),子进程就不从当前的栈框架中返回,并且如果子进程改变了父进程的
数据结构就不能调用exit函数。子进程还必须避免改变全局数据结构或全局变量中的任何信息,因为这些改变都有可能使父进程不能继续。
通常,如果应用程序不是在fork()之后立即调用exec(),就有必要在fork()被替换成vfork()之前做仔细的检查。
用fork函数创建子进程后,子进程往往要调用一种exec函数以执行另一个程序,当进程调用一种exec函数时,该进程完全由新程序代换
,而新程序则从其main函数开始执行,因为调用exec并不创建新进程,所以前后的进程id 并未改变,exec只是用另一个新程序替换了
当前进程的正文,数据,堆和栈段。
8, alias sudo vi="vim"不行,取代方法alias vi="vim" alias sudo="sudo "(sudo后面有空格)
9, 写驱动时,注意main.c里DEVICE_NAME是最终在/proc/devices目录下的名字,Makefile里的obj-m=name.o的name最终生成name.ko供insmod取用,mknod /dev/namedev 注意这三个name
10,export PATH=/usr/local/arm/toolchain/bin-ccache:/usr/local/arm/toolchain/bin:$PATH
export CROSS_COMPILE=arm-linux-gnueabihf-
export ARCH=arm