在ubuntu中设置无线共享是很方便的,有许多开源的工具可以使用,例如hostapd+dnsmasq,但是升级到14.10之后似乎以前的方法不太适用了,未知是因为否与系统的network-manager冲突的关系。即使如此,不妨就使用network-manager来设置,但是总也不成功。经过一番google,终于找到了一个可行的方案。

在网络设置中共享

  1. 点击桌面右上角的网络连接图标,选择最后一项edit connections...

Read More

继续上一节,学习simics hindsight使用,命令行参数部分。

帮助系统

simics常用命令按类别分组,要查看分类,可以输入help。

1
2
3
4
5
6
simics> help
[...]
To get you started, here is a list of command categories:
Breakpoints Files and Directories Python
CD-ROM GUI Real Network
Changing Simulated State Haps Registers

使用help catogory打印该分类下的命令清单:

1
2
3
4
5
6
simics> help "Changing Simulated State"
Commands available in the Changing Simulated State category:
<image>.set set bytes in image to specified value
<memory-space>.load-binary load binary (executable) file into memory
<memory-space>.load-file load file into memory

Read More

  继续学习simics的使用。

CLI命令行界面

  simics CLI是一种基于文本的高级用户界面,内置帮助系统,上下文敏感可用tab补全,支持脚本编程,作为hindsight的一部分一起提供。

  如果使用了GUI,那么可以通过Control Window的Tools → Command Line Window来启动。Eclipse中位于Console View中。如果未使用GUI,则位于启动simics的shell中。

调用命令

  在命令行中输入命令+参数来使用,可以在reference manual中找到许多例子,以下是两个例子:

1
2
3
4
SYNOPSIS
command1 -x -y -small [cpu-name] address (size|name)
SYNOPSIS
command2 files . . .

  以短横线开头的选项都是flag并且总是可选的,flag长度可能不止一个字符,且不能以-xy的形式来表示-x -y,位置不敏感,可位于参数列表中的任意位置。

Read More

概念

  以下介绍一些关于模拟的基本概念。

模拟的限制

  Simics是系统层指令集模拟器,也就是说:

指令级的模拟,一次执行一个指令
模拟硬件的二进制接口,任何硬件上运行的软件在target上也能运行

  包括firmawre,硬件驱动,操作系统和用户程序在内的任何软件都能在target上运行。

  simics的时间系统非常简单,例如它默认所有指令的执行时间是一样的,利用这点将可以编写简单程序来区别模拟与真实系统。

非入侵的观察和调试

  Simics有强大的调试和观察功能:

观察和设置**register,memory和硬件状态**
设置断点和观察点
以脚本实现上述功能

  有了上述支持,无须在target上安装任何调试程序,因此调试行为也对target及之上的软件是完全透明的。

Read More

  Simics由多个产品和可选的add-on组成,此文档介绍它们分别是什么,彼此如何交互。

Simics HindSight

  软件开发人员使用的主要/基本的产品,为Simics平台提供用户接口软件调试接口。HindSight可以通过Eclipse来使用,也可以单独使用。如果单独使用,可以用通用的如GDB这样的或者其它IDE的软件调试器与之连接。

  HindSight提供脚本编程、设备和系统登录、低层Debugging断点和WatchPoint能力,还提供独有的对调试隐蔽Bug极为有用的反向执行能力。

  HindSight还提供save和load能力,ckeckpoints包含系统(CPU,内存,软件等)状态的所有信息,你可以将其只在到硬盘当中,随时可以还原系统状态。

  Simics还提供一个虚拟板卡,所谓的“Quick Start Platform. QSP”,它是一个包含有限合成物和专门模拟设备的简单虚拟平台。用户可以通过它来上手和熟悉Simics特性。因为它的设备模型并不与真实物理设备对应,所以不能用它来运行真正的firmware。

Read More

  Simics是一种支持定义、开发和部署数字系统的模拟器,具有快速、准确、可伸缩和扩展的特点,为工程人员提供了新的系统开发途径。Simics是一种完全系统模拟平台,能快速、确定且可控地运行未经修改的二进制文件。在硬件昂贵、稀缺甚至不存在时,为早期软件开发和测试提供理想的环境。Simics对Intel内部部门是免费使用的。

  Simics可以加速系统设计,软件开发和任何数字系统的部署,不论是简单的CPU还是复杂混合的架构,多平台,计算机网络系统。Simics支持混合CPU类型的异构平台,从单CPU到数百SoC通过Ethernet连接的多机架系统。Simics提供不限于ARM, H8, MIPS, SPARC, SH, TI C64, and IA (x86)架构模型及周边系统。

完全系统模拟

  Simics可以模拟任何数字系统,基本的CPU+内存,定制的FPGA或ASIC,单个的板卡或插满板卡的机架,大型复杂的混合架构系统模型可以由现成的若干处理器家庭,数百计的IO设备和标准通信,背板和网络协议组成。

Read More

认识Linux的启动过程对每一个Linux使用者和管理员都是必要的,它能使你一幅清晰的Linux如何工作的图景。本文会介绍按下电源到登录提示出现过程中都经历了哪些过程。下图会给你一个简洁明了的整体认识。

简要启动过程:

1. 按下电源键
2. CPU跳到BIOS
3. BIOS运行POST
4. 寻找第一个可启动设备
5. 加载执行MBR
6. 加载OS
7. 用户提示符

以下是Linux启动过程中的详细阶段。

1) 系统启动(硬件)
2) Boot Loader阶段1(MBR加载)
3) Boot Loader阶段2(GRUB加载)
4) Kernel
5) INIT
6) 用户提示符

阶段1:系统启动

CPU加电后执行的第一个指令就是将控制交给BIOS进行开机自检,BIOS会执行两个任务:

执行POST
选择第一个可启动设备

Read More

什么是Zygot,init.rc,和Linux的启动过程有什么区别等。

通电与系统启动

电源接通以后,Boot Rom从一个写入硬件的预定义的地址开始执行,它会加载BootLoader到内存中执行。

(注:类似PC的BIOS)

BootLoader

这是一个在android之前运行的小程序,它不是android的一部分,是厂商设置锁的其它限制的地方。

(注:类似Linux的Grub)

Bootloader分两步执行,首先它检测外部Ram并加载一个第二步中要用到的程序。

第二步中,bootloader安装内核运行需要的网络、内存等,它为kernel的特定功能提供配置参数或者输入

bootloader可以在这里找到:

1
<android source>/bootable/bootloader/legacy/usbloader

legacy的loader包含两个重要部分:

1. init.s:: 初始化栈,置零BSS segment和调用main.c中的call_main()2. main.c:: 初始化硬件(硬件,主板,键盘,控制台)和创建Linux tags

Read More

linux下的ip命令有点类似ifconfig命令,但是更强大,且有意取代它。使用ip命令可以完成多项网络管理操作,ifconfig是net-tools工具下的一个命令,而这个工具已经多年没有维护,已不建议使用的,而iproute2保留并增强了它的许多功能。

许多的Linux发行版都已经内置了iproute2工具集。

IP地址相关操作

ip命令使用CIDR格式来表示MASK,更直观也更方便输入,不用输入长串的255了。

显示IP

1
2
3
4
5
6
7
8
9
10
11
chen@vaio:~$ ip addr show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 30:f9:ed:fe:66:4d brd ff:ff:ff:ff:ff:ff
inet 10.210.106.20/27 brd 10.210.106.31 scope global eth0
valid_lft forever preferred_lft forever
inet6 2001:da8:215:fa50:a55d:8c14:6748:xxxx/64 scope global temporary dynamic
valid_lft 569852sec preferred_lft 50852sec
inet6 2001:da8:215:fa50:32f9:edff:fefe:xxxx/64 scope global mngtmpaddr noprefixroute dynamic
valid_lft 2591880sec preferred_lft 604680sec
inet6 fe80::32f9:edff:fefe:664d/64 scope link
valid_lft forever preferred_lft forever

增加或删除IP

1
2
3
ip addr add 192.168.0.193/24 dev wlan0
ip addr del 192.168.0.193/24 dev wlan0

Read More

一般的VPS只有一个IPv4地址,如果想要拥有IPv6地址,必须使用隧道,隧道是一种overlap技术,即将IPv6的包用IPv4进行再次封装,在两个v4网络的端点间传输,在其它使用网络服务的进程看来与真实的IPv6没有任何区别。

此教程也不限于在VPS上使用,在其它Linux和Mac OS主机上也是可用的,但前提是电脑有公网IPv4地址,MAC OS可能细节稍有不同。

为什么要为VPS创建v6隧道,场景有二:1)利用IPv6从绕过校园网计费网关连接到VPS,进而接入世界;2)IPv4用户也能享用IPv6的PT资源。

先来看建立v6隧道之前的VPS网络情况,顺带一提我给VPS装的CentOS6系统:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[root@localhost ~]# ifconfig
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:27661 errors:0 dropped:0 overruns:0 frame:0
TX packets:27661 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:81575090 (77.7 MiB) TX bytes:81575090 (77.7 MiB)
venet0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:127.0.0.1 P-t-P:127.0.0.1 Bcast:0.0.0.0 Mask:255.255.255.255
UP BROADCAST POINTOPOINT RUNNING NOARP MTU:1500 Metric:1
RX packets:156925340 errors:0 dropped:0 overruns:0 frame:0
TX packets:298546103 errors:0 dropped:11986 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:157483015316 (146.6 GiB) TX bytes:164615931237 (153.3 GiB)
venet0:0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:104.194.xx.xx P-t-P:104.194.xx.xx Bcast:104.194.xx.xx Mask:255.255.255.255
UP BROADCAST POINTOPOINT RUNNING NOARP MTU:1500 Metric:1

隧道申请

首先你要有一个隧道服务的提供商,推荐tunnelbroker.net,本人长期使用,比较稳定。
注册完成以后,点击Create Regular Tunnel,在IPv4 Endpoint (Your side)填入你的VPS的IPv4地址,在列表中选择一个离你的VPS最近的Server创建隧道,尽量使延迟最小。

Read More