Ubuntu16.04 使用apt-mirror配置本地源

安装apt-mirror

1
$sudo apt-get install apt-mirror
  • 查看系统的研发代号

首先查看自己的Ubuntu系统的Codename,这直接导致你更新的源是否对你的系统起效果,查看方法:

1
lsb_release –a

我的系统Codename为xenial。

  • 确认源支持

以阿里源为例,登陆 http://mirrors.aliyun.com/ubuntu/dists/ ,该网页显示了阿里云支持的Ubuntu系统下各个Codename版本,确保自己的Codename在该网页中存在。

附上Ubuntu16.04源列表:http://wiki.ubuntu.com.cn/%E6%A8%A1%E6%9D%BF:16.04source

linux下内存权限管理及进程地址空间查看

最近在linux下做开发,需要修改内存地址的值,这就涉及到内存权限的问题。这里主要讲两个方面的东西,一是修改内存权限,另一个是进程地址空间之初探。

【摘抄】

内存权限

在Linux中,mprotect()函数可以用来修改一段指定内存区域的保护属性。

函数原型如下:

1
2
3
#include <unistd.h>
#include <sys/mmap.h>
int mprotect(const void *start, size_t len, int prot);

mprotect()函数把自start开始的、长度为len的内存区的保护属性修改为prot指定的值。

Ubuntu下adb显示device not found及Permission denied解决办法

明天就是国庆了,七天的假期啊!!宝宝也想回家。可是,回家,没有票;出去玩,没有票;男票,回家了!不开心!只能在实验室调bug,苦命的人啊。

最近接触了一点Android 开发,需要连接真机进行调试,会用到adb这个工具(Android Debug Bridge)(adb是一个 客户端-服务器端 程序, 其中客户端是你用来操作的电脑, 服务器端是android设备)。可是在Ubuntu12.04下连接设备以后,adb shell 总是提示device not found。有时候连上也会遇到Permission denied的问题,现将解决方法整理如下。

device not found解决办法

  1. 查看设备VID和PID

    使用lsusb查看usb设备,找到自己的设备

解决TeamViewer 11 “试用期已到期”

远程控制,桌面共享,文件传输——TeamViewer,你值得拥有!

好吧,小小地打了下广告。最近在实验室因为某种原因需要windows远程连接ubuntu,我就选择了TeamViewer 11,它是跨平台的,确实挺好用,可是好端端的就提示我试用期已到期。神烦啊!

因为它是绑定了网卡的mac地址,所以仅卸载重新安装是无效的。看到网上有一些教程,试了一下,果然成功了!现在整理一下方便以后查看。我是先卸载原来的再进行以下步骤的,有人说不卸载完全退出就可以,大家可以试试。

程序的链接和装入

最近在看linux elf文件格式,发现对一个可执行文件的运作完全不了解,所以先简单摘录一下。

【摘抄】

链接器和装入器的基本工作原理

一个程序在内存中运行,需要经过编译,链接,装入这几个步骤。源文件先是被编译成一个个目标文件, 再由链接器把这些目标文件组合成一个可执行文件或库。编译就是把高级语言变成计算机可以识别的2进制语言。链接的过程,其核心工作是解决模块间各种符号(变量,函数)相互引用的问题,对符号的引用本质是对其在内存中具体地址的引用,因此确定符号地址是编译,链接,加载过程中一项不可缺少的工作,这就是所谓的符号重定位。本质上来说,符号重定位要解决的是当前编译单元如何访问「外部」符号这个问题。

编译器只能在一个模块内部完成符号名到地址的转换工作,不同模块间的符号解析由谁来做呢?实际上,这个工作是由链接器来完成的。

为了解决不同模块间的链接问题,链接器主要有两个工作要做――符号解析和重定位:

符号解析:当一个模块使用了在该模块中没有定义过的函数或全局变量时,编译器生成的符号表会标记出所有这样的函数或全局变量,而链接器的责任就是要到别的模块中去查找它们的定义,如果没有找到合适的定义或者找到的合适的定义不唯一,符号解析都无法正常完成。

重定位:编译器在编译生成目标文件时,通常都使用从零开始的相对地址。然而,在链接过程中,链接器将从一个指定的地址开始,根据输入的目标文件的顺序以段为单位将它们一个接一个的拼装起来。除了目标文件的拼装之外,在重定位的过程中还完成了两个任务:一是生成最终的符号表;二是对代码段中的某些位置进行修改。编译器编译文件时,会建立一系列表项,用来记录哪些地方需要在重定位时进行修正,这些表项叫作“重定位表”(relocatioin table), 链接器通过重定位表知道目标文件中哪些地方需要修正。

Android Studio NDK 调试

本人最近在接触Android Studio,是个新手,完全不懂,发现它和eclipse还是有一些差别的。Android开发过程中要Debug,弄了好久才弄好,现在整理一下,方便以后查看。

我的IDE是Android Studio 1.5.1,NDK是 android-ndk-r10e。前面的一些配置我就不细说了,主要是针对Debug整理一下。

步骤1

打开module的build.gradle文件,在buildTypes下添加以下代码。

1
2
3
debug{
jniDebuggable true
}