让自己网速快起来你可以 自己在系统中设置 步骤我给你写出来
单击“开始→运行”命令,输入“gpedit.msc”后回车,运行“组策略”程序,
依次展开“计算机配置→管理模板→网络→Qos数据包调度程序”,在右侧的
窗口中双击“限制可保留带宽”项,打开“限制可保留带宽属性”对话框,
选择“已启用”选项,然后在“带宽限制”中把数值设为“0”即可一起用一
个..不要用软件封别人了.似乎很不好 :)
win调用记事本 notepad
计算器 calc
画图工具 mspaint
*********************************************
#define EV_SYN 0x00
#define EV_KEY 0x01 //按键
#define EV_REL 0x02 //相对坐标(轨迹球)
#define EV_ABS 0x03 //绝对坐标
#define EV_MSC 0x04 //其他
#define EV_SW 0x05
#define EV_LED 0x11 //LED
#define EV_SND 0x12//声音
#define EV_REP 0x14//repeat
#define EV_FF 0x15
#define EV_PWR 0x16
#define EV_FF_STATUS 0x17
#define EV_MAX 0x1f
#define EV_CNT (EV_MAX+1)
*********************************************
vi 取消撤销命令 ctrl + r
产品经理常用的三款软件:
用于思维分析的 mindmanager
用于快速建立演示界面的Axure
快速构建3D模型的Google sketchup3D
python -m SimpleHTTPServer
共享网络文件
******************************* 高端内存 *******************************************
Linux 把内核地址空间(0xc0000000 -- 0xfffffffff)划分为
DMA区 NORMAL区 高端内存区
16M 16M - 896M 剩下的128M
对于超过1G物理内存的RAM ,内核无法访问,就借助128M的高端内存访问,
比如访问 0x4000000 - 0x40010000 间的物理 1M 空间,就先在高端空间寻找空闲的 1M 地址
然后把此地址映射到物理地址上,这样就可以访问高于1G的内存了;
*****************************************************************************
sed -i "s/123/234/g" main.c //在命令中把mian.c里面的123替换成234
环境变量格式:
export PATH="/opt/STM/STLinux-2.3/devkit/sh4/bin:$PATH"
vi实现多行的空格缩进;
:n,m,s/^/ /g
其中n代表从n行开始
m代表到m行结束
g前面的空格为要缩进的空格个数;
或者直接 v 几行,之后 <
****************************************************************
svn update -r 200 test.php 更新某文件到一个版本
svn diff -r 200:201 test.php 比较两文件的差异性
svn log|less log信息从顶部向下显示,less是正续显示;
svn ci -m "注释信息" 文件
****************************************************************
在浏览器上输入 file:///F:/工作资料
就可以打开本地F盘的工作资料 目录
dmesg 显示内核开机信息,也可以用来查看usb插入之后的信息
dmesg |grep usb
cat /proc/kmsg &
vi 一下波浪线代表把当前小写变大写,大写变小写
**********************************************************************************************
3. 遍历文件夹grep一个字符串
find . -name "*c" | xargs grep "strings"
在当前文件夹下所有c文件中查找字符串“string”
要么直接 grep -inR \string /文件路径
************************************************
ubunt 快捷键使用
ctrl + L 代表clear命令
ctrl + D 代表返回桌面命令,此命令要自己设置 /seting/keyboard/shortcut...
************************************************
/mnt # time cp /tmp/sd2/sd1/\[Andorid开发视频教学\]01_27_项目功能分4 ./
real 0m 2.20s
user 0m 0.03s
sys 0m 1.07s
***********************************************
ubuntu解压命令全览
.tar
解包:tar xvf FileName.tar
打包:tar cvf FileName.tar DirName
注:tar是打包,不是压缩!
~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~
.gz
解压1:gunzip FileName.gz
解压2:gzip -d FileName.gz
压缩:gzip FileName
~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~
.tar.gz 和 .tgz
解压:tar zxvf FileName.tar.gz
压缩:tar zcvf FileName.tar.gz DirName
~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~
.bz2
解压1:bzip2 -d FileName.bz2
解压2:bunzip2 FileName.bz2
压缩: bzip2 -z FileName
~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~
.tar.bz2
解压:tar jxvf FileName.tar.bz2
压缩:tar jcvf FileName.tar.bz2 DirName
~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~
.bz
解压1:bzip2 -d FileName.bz
解压2:bunzip2 FileName.bz
压缩:未知
.tar.bz
解压:tar jxvf FileName.tar.bz
压缩:未知
~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~
.Z
解压:uncompress FileName.Z
压缩:compress FileName
.tar.Z
解压:tar Zxvf FileName.tar.Z
压缩:tar Zcvf FileName.tar.Z DirName
~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~
.zip
解压:unzip FileName.zip
压缩:zip FileName.zip DirName
~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~
.rar
解压:rar x FileName.rar
压缩:rar a FileName.rar DirName
rar请到:http://www.rarsoft.com/download.htm 下载!
解压后请将rar_static拷贝到/usr/bin目录(其他由$PATH环境变量指定的目录也可以):
[root@www2 tmp]# cp rar_static /usr/bin/rar
~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~
.lha
解压:lha -e FileName.lha
压缩:lha -a FileName.lha FileName
lha请到:http://www.infor.kanazawa-it.ac.jp/~ishii/lhaunix/下载!
>解压后请将lha拷贝到/usr/bin目录(其他由$PATH环境变量指定的目录也可以):
[root@www2 tmp]# cp lha /usr/bin/
~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~
.rpm
解包:rpm2cpio FileName.rpm | cpio -div
~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~
.deb
解包:ar p FileName.deb data.tar.gz | tar zxf -
~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.
tar .tgz .tar.gz .tar.Z .tar.bz .tar.bz2 .zip .cpio .rpm .deb .slp .arj .rar .ace .lha .lzh .lzx .lzs .arc .sda .sfx .lnx .zoo .cab .kar .cpt .pit .sit .sea
解压:sEx x FileName.*压缩:sEx a FileName.* FileName
***********************************************************************************************
************************************************************************
通常我们会在.vimrc中设置缩进,不过编辑源代码的时候粘贴就出问题了,粘贴的代码每行会多一次缩进,结果就面目全非了,解决方法是先设置为粘贴模式:
:set paste
内核中字符串的拼接
char name[20];
sprintf(name,"empty%d",i);字符串拼接;
dd命令是linux下非常有用的一个命令,作用就是用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换
vim在两个大括号之间的跳转,% ,在括号位置按%;
D 表示删除光标后面的所有字符,直至一行结尾处;
************************************************************************
DMA申请和使用的所有笔记
内存中用于与外设交互数据的一块区域被称做DMA缓冲区,在设备不支持scatter/gather CSG,
分散/聚集操作的情况下,DMA缓冲区必须是物理上连续的。
在分配内存时,系统会尽量给我们分配连续的物理内存,这样有什么好处呢?我知道的有如下2条:
1、DMA不使用页表机制,因此必须分配连续的物理内存。
2、使用连续物理内存可以提高系统整体性能。
申请DMA设备
像使用中断一样,在使用DMA之前,设备驱动程序需要首先向系统申请DMA通道,
申请DMA通道的函数如下:
int request_dma(unsigned int dmanr, const char * device_id);
同样的,设备结构体指针可作为传入device_id的最佳参数。
使用完DMA通道后,应该使用如下函数释放该通道:
void free_dma(unsinged int dmanr);
DMA映射
DMA映射包括两个方面的工作:分配一片DMA缓冲区;为这片缓冲区产生设备可访问的地址
。结合前面所讲的,DMA映射必须考虑Cache一致性问题。
Cache的一致性就是指Cache中的数据,与对应的内存中的数据是一致的。
内核中提供了以下函数用于分配一个DMA一致性的内存区域:
void *dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *handle, gfp_t gfp);
以下函数用于分配一个写合并(writecombinbing)的DMA缓冲区:
void *dma_alloc_writecombine(struct device *dev, size_t size, dma_addr_t *handle, gfp_t gfp);
流式DMA映射(单物理地址连续的缓冲区)
对于单个已经分配的缓冲区而言,使用dma_map_single()可实现流式DMA映射:
dma_addr_t dma_map_single(struct device *dev, void *buffer, size_t size, enum dma_data_direction direction);
如果映射成功,返回的是总线地址,否则返回NULL.最后一个参数DMA的方向,可能取DMA_TO_DEVICE, DMA_FORM_DEVICE, DMA_BIDIRECTIONAL和DMA_NONE;
与之对应的反函数是:void dma_unmap_single(struct device *dev,dma_addr_t *dma_addrp,size_t size,enum dma_data_direction direction);
驱动访问流式DMA映射
通常情况下,设备驱动不应该访问unmap()的流式DMA缓冲区,如果确实要访问的话,就使用下面的函数操作
这时可先使用如下函数获得DMA缓冲区的拥有权:
void dma_sync_single_for_cpu(struct device *dev,dma_handle_t bus_addr, size_t size, enum dma_data_direction direction);
在驱动访问完DMA缓冲区后,应该将其所有权还给设备,通过下面的函数:
void dma_sync_single_for_device(struct device *dev,dma_handle_t bus_addr, size_t size, enum dma_data_direction direction);
基于分散/聚集的DMA缓冲区映射(物理地址不连续的多缓冲区)
如果设备要求较大的DMA缓冲区,在其支持SG模式的情况下,申请多个不连续的、相对较小的DMA
缓冲区通常是防止申请太大的连续物理空间的方法。在Linux内核中,使用如下函数映射SG:
int dma_map_sg(struct device *dev, struct scatterlist *sg, int nents,
enum dma_data_direction direction);
nents是散列表(scatterlist)入口的数量,该函数的返回值是DMA缓冲区的数量,可能小于nents。对
于scatterlist中的每个项目,dma_map_sg()为设备产生恰当的总线地址,它会合并物理上临近的内存区域。
scatterlist结构体的定义如代码清单11.18所示,它包含了scatterlist对应的page结构体指针、缓冲区
在page中的偏移(offset)、缓冲区长度(length)以及总线地址(dma_address)。
执行dma_map_sg()后,通过sg_dma_address()可返回scatterlist对应缓冲区的总线地址,sg_dma_len()
可返回scatterlist对应缓冲区的长度
如果设备驱动一定要访问映射情况下的SG缓冲区,应该先调用如下函数:
int dma_sync_sg_for_cpu(struct device *dev,struct scatterlist *sg, int nents,enum dma_data_direction direction);
访问完后,通过下列函数将所有权返回给设备:
int dma_map_device(struct device *dev,struct scatterlist *sg, int nents,enum dma_data_direction direction);
***********************************************************************
copy_from_user((void *)&bl_val, (const void *)arg, sizeof(unsigned long));
copy_to_user((void *)arg, (const void *)&bl_val, sizeof(unsigned long));
******************************** shell *****************************
ln的链接又软链接和硬链接两种,软链接就是ln -s ** **,它只会在你选定的位置上生成一个文件的镜像,
不会占用磁盘空间,硬链接ln ** **,没有参数-s, 它会在你选定的位置上生成一个和源文件大小相同的文件,
无论是软链接还是硬链接,文件都保持同步变化。软链接是可以跨分区的,但是硬链接只能在同一分区内
**********************************************************************
Linux内核结构体
struct file
file_operatiorn f_op; //操作函数接口
mode_t f_mode; //读写模式
void* private_data; //私有数据指针
unsigned int f_flags; //阻塞与非阻塞
struct inode // inode包含文件访问权限、属主、组、大小、生成时间、访问时间、最后修改时间等信息
struct block_device* i_bdev;
struct cdev* c_dev;
struct cdev
struct module *owner;
const struct file_operations *ops;
struct list_head list;
dev_t dev;
unsigned int count;
struct device
struct semaphore sem;
struct bus_type * bus;
void *driver_data; /* data private to the driver */
void *platform_data; /* Platform specific data, device
struct class *class;
***************************************************************************************************
*************************************************
find / -amin -10 # 查找在系统中最后10分钟访问的文件
*************************************************
*************************************************
int main(int argc,char** argv){
char str[10];
strcpy(str,argv[1]); //字符的输入拷贝
int value;
value = strtoul(argv[2],NULL,0); //数字的输入拷贝
}
./a.out score 100
打印 参数二(字符串) 参数三(数字)
**************************************************
fflush(stdout)当然是清空stdout的缓冲区了
就是有输出就直接输出,不会积累到缓冲区满了再输出
你可以试试下面的代码
int i;
for (i=0;i<10;i++)
{
printf("%d",i);
// fflush(stdout);
sleep(1);
}
再去掉注释试试就知道了
一般就是在输出打印之后加上fflush函数;
**************************************
********************** poll 的实现 **************************
poll的实现是基于等待队列的(睡眠与唤醒,得不到数据而睡眠),但是与一般等待队列的使用方法是不一样的,
poll的实现只要定义等待队列头就可以了,不需要定义等待队列
1)定义
wait_queue_head_t poll_wait_queue;
2)初始化等待队列头
init_waitqueue_head(&g_innov_notifier_priv.poll_wait_queue);
3)在poll函数里实现
poll_wait(filp, &g_innov_notifier_priv.poll_wait_queue, poll_table);
4)在中断里唤醒
wake_up_interruptible(&g_innov_notifier_priv.poll_wait_queue);
**************************************************************
********************* 等待队列的一般用法 *********************
1) 定义和初始化等待队列头
wait_queue_head_t wqh;//定义等待队列头类型变量
init_waitqueue_head(wait_queue_head_t *wqh);//初始化等待队列头
DECLARE_WAIT_QUEUE_HEAD(name);//定义并初始化等待队列头
2) 定义和初始化等待队列
DECLARE_WAITQUEUE(name,task);//定义并初始化一个名为name的等待队列,task通常被设置为代表当前进程的current指针。
3) 添加/移除等待队列
add_wait_queue(wait_queue_head_t *q,wait_queue_t wait);
remove_wait_queue(wait_queue_head_t *q,wait_queue_t *wait);
前者是将等待队列wait添加到等待队列头q指向的等待队列数据链中,后者从中移除。
4) 等待事件
wait_event(queue,condition);//当condition为真时,立即返回;否则进程进入TASK_UNINTERRUPTIBLE类型的睡眠状态,并挂在queue指定的等待队列数据链上。
wait_event_interruptible(queue,condition);//当condition为真时,立即返回;否则进程进入TASK_INTERRUPTIBLE类型的睡眠状态,并挂在queue指定的等待队列数据链上。
wait_event_killable(queue,condition);//当condition为真时,立即返回;否则进程进入TASK_KILLABLE类型的睡眠状态,并挂在queue指定的等待队列数据链上。
wait_event_timeout(queue,condition);//当condition为真时,立即返回;否则进程进入TASK_UNINTERRUPTIBLE类型的睡眠状态,并挂在queue指定的等待队列数据链上;当阻塞时间timeout超时后,立即返回。
wait_event_interruptible_timeout(queue,condition);//当condition为真时,立即返回;否则进程进入TASK_INTERRUPTIBLE类型的睡眠状态,并挂在queue指定的等待队列数据链上;当阻塞时间timeout超时后,立即返回。
5) 唤醒队列
wake_up(wait_queue_head_t *queue);//唤醒由queue指向的队列数据链中的所有睡眠类型的等待进程。
wake_up_interruptible(wait_queue_head_t *queue);//唤醒由queue指向的队列数据链中的所有睡眠类型为TASK_INTERRUPTIBLE的等待进程。
*******************************************************************************
********************************** 三层内存的物理申请 *************************
*** #define TCC_MEM_SIZE " mem=422M"
#define TCC_VPU_SIZE 56
#else
/arch/arm/kernel/setup.c
char *tcc_mem_size = TCC_MEM_SIZE;
strcat(default_command_line, tcc_mem_size);
等价于 strcat(default_command_line, mem=422M ); 这样就预留了(512-422)M空间地址;
在Linux内核引导时,传入参数“mem=size”保留顶部的内存区间。比如系统有256MB内 存,
参数“mem=248M”会预留顶部的8MB内存,进入系统后可以调用ioremap(0xF800000,0x800000)来申请这段内存
********************************************************************************
**************************** printk ***********************************
#if DEBUG
#define DDD(fmt, arg...) do{printk("[%s:%d]" fmt "\n", __func__, __LINE__, ##arg);}while(0)
#else
#define DDD(fmt, arg...)
#endif
***********************************************************************
冷格就是在升级系统前对硬盘进行的格式化,可以将一个分区格式化为不同的文件系统
mkfs.ext3 是最常用的命令之后. 跟他同一效果的命令是 mkfs -t ext3 都将会把指定分区格式化为ext3格式。
例如:
比如我们用fdisk /dev/sda 给磁盘先分了一个分区 /dev/sda5 分区完记得执行partprobe将分区信息写入内核.
此时必须把分区格式化之后,才可以挂载到文件系统.
mkfs.ext3 /dev/sda5 格式化完毕之后,就可以正常挂载了 mount /dev/sda5 /data
mkdosfs
mkdosfs -n Tester /dev/fd0 将 A 槽里的磁碟片格式化为 DOS 格式,并将标签设为 Tester
******************************************************************************************************
要将目录/modules下面所有文件中的zhangsan都修改成lisi,这样做:
sed -i "s/zhangsan/lisi/g" `grep zhangsan -rl /modules`
解释一下:
-i 表示inplace edit,就地修改文件
-r 表示搜索子目录
-l 表示输出匹配的文件名
只修改一个文件,后面的grep就不需要了...
******************************************************************************************************
du -sh disk 查看disk文件夹的大小
#if 01
#define DDD(fmt, arg...)
#else
#define DDD(fmt, arg...) do{printk("[%s:%d]" fmt "\n", __func__, __LINE__, ##arg);}while(0)
#endif
******************************************************************************************************
device_create()
功能:该函数创建一个设备并将其注册到sysfs中,同时在系统的sys/class和sys/device目录下会生成相应的类和设备入口。并且,该函数还会出发用户空间udev的动作,udev会根据sysfs下的class在/dev目录下创建设备节点,这也为自动创建设备节点提供了一种途径。通过device_create()函数,我们就可以不用通过mknod命令手动的创建设备节点了
******************************************************************************************************