供给,Linux图解教程

【转自】

关键步骤:

1 编译linux-2.6.14.tar.bz2,基于smdk2410_defconfig

2 编译skyeye-1.2.4_Rel.tar.gz

3 编译busybox-1.19.2.tar.bz2,用于创设initrd.img文件

4 制作initrd.img文件

5 用skyeye模拟运维

6 在arm-linux里运营大家友好的次第

[[
]]
[]
再加上
][
总共是 4 个在段落(对于 C 来说正是函数)间跳转的吩咐。

必要 Windows Native (1卡塔尔国,windowsnative

[源码下载]

必备 Windows Native (1卡塔尔国 - C 语言: hello c

作者:webabcd

介绍
供给 Windows Native 之 C 语言

  • 在 Windows Store Apps 中调用 C/C
  • hello c

示例
1、演示怎样在 Windows Store Apps(C#卡塔尔(قطر‎ 中调用 C/C ,需求新建 Windows Runtime Component(C 卡塔尔(قطر‎ 项目
NativeDll/Simple.h

/*
 * .h 头文件
 */

// 保证头文件只被编译一次(即使被多次引用,也只被编译一次)
#pragma once 

namespace NativeDll // 命名空间
{
    public ref class Simple sealed // 类
    {
    public:
        int Add(int x, int y); // 方法
    };
}

NativeDll/Simple.cpp

/*
 * .cpp 实现文件
 *
 * 为了支持 Windows Runtime Component 这种方式,所以引入 Microsoft created the Visual C   component extensions (C  /CX),可以将其看作是连接“调用者”和“C/C  ”之间的桥梁,元数据是 windows metadata (.winmd) files
 * 为了让“调用者”调用 Windows Runtime Component,所以 C  /CX 会有自己的一些数据类型,比如字符串是 Platform::String^ 类型的,这样才能让“调用者”调用
 * 关于 C  /CX 的相关知识请参见:https://msdn.microsoft.com/en-us/library/hh755822.aspx
 */

#include "pch.h" // 预编译头文件
#include "Simple.h" // 需要实现的头文件

// 头文件中定义的命名空间
using namespace NativeDll;

// 实现头文件中的方法
int Simple::Add(int x, int y)
{
    return x   y;
}

NativeDemo/Simple.xaml.cs

/*
 * 演示如何用 C# 调用 C  
 * 
 * 对应的 Windows Runtime Component(C  ) 详见 NativeDll 项目
 * 注意:Windows Runtime Component 项目会生成 .winmd 文件,winmd - Windows Metadata,其是语言无关的
 */

using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Navigation;

namespace NativeDemo.Demo
{
    public sealed partial class Simple : Page
    {
        public Simple()
        {
            this.InitializeComponent();
        }

        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            // 调用 C   中的函数
            NativeDll.Simple simple = new NativeDll.Simple();
            int result = simple.Add(1, 1);

            lblMsg.Text = "1   1 = "   result.ToString();
        }
    }
}

readme.txt

1、为了使用 C 语言,需要选中相应的 .c 文件 -> 右键 -> 属性 -> c/c   -> 高级 -> 编译为 -> 编译为 C   代码(/TP)
2、比如你要用 strcpy 的话,在 vs 中会警告你,要求你用 strcpy_s,但是 strcpy_s 是微软自己的,为了去掉这个警告可以这么做:
  a) 在文件开头定义  #define _CRT_SECURE_NO_WARNINGS
  b) 或者一劳永逸的方法:dll 项目 -> 右键 -> 属性 -> c/c   -> 预处理器 -> 在“预处理器定义”增加 “_CRT_SECURE_NO_WARNINGS”
3、调试本地代码:选中解决方案 -> 右键 -> 属性 -> 调试 -> 调试器类型 -> 选中“混合(托管和本机)”
4、如何在新建 c 代码时,默认保存为 utf-8 格式:在类似 D:Program Files (x86)Microsoft Visual Studio 12.0VCvcprojectitems 的目录下修改模板文件“hfile.h”和“newc  file.cpp”的文件格式为 utf-8

2、hello c
cHello.h

// c 的 .h 文件


// 头文件一般用于放置:需要向外暴露的宏定义,全局变量声明,函数声明


// 防止同一文件的二次编译。比如你有两个 c 文件,这两个 c 文件都 include 了同一个头文件,在编译时,这两个 c 文件就会被一同编译,那么就带来了声明冲突的问题
#ifndef _MYHEAD_HELLO_ // 是 if not defined 的缩写,如果没定义 _MYHEAD_HELLO_ 则执行这一块
#define _MYHEAD_HELLO_ // 定义 _MYHEAD_HELLO_





// 在 c   中写 c 语言代码
#ifdef __cplusplus // 如果当前是 c   环境
extern "C" // 告诉 c   下面的 { } 块中写的是 c 语言代码
{
#endif

    // 函数声明
    char *demo_cHello(char *name);

#ifdef __cplusplus // 如果当前是 c   环境
}
#endif





/*
// 在 windows 环境下,可以简写成这样
#ifdef __cplusplus
extern "C"
#endif

char *demo_cHello(char *name);
*/





#endif // #ifndef _MYHEAD_HELLO_

cHello.c

/*
 * hello c
 */

#include "pch.h" // 预编译头文件
#include "cHello.h" // 引入需要实现的头文件
#include "cHelper.h" // 引入自定义函数的头文件

char *demo_cHello(char *name)
{
    return str_concat2("hello: ", name);
}



// 本 demo 无法演示 main 函数,所以以下做一些关于 main 函数的文字说明

// main 函数是入口函数,不能被其它函数调用
// 假设命令为:可执行文件名 参数1 参数2 参数3
int main(int argc, char *argv[]) // main 函数也可以是无参无返回值的,即:int main(void) { } 或 void main(void) { } 都是可以的
{
    // argc 是参数个数;argv 是参数值

    // argc - 等于 4 (注:“可执行文件名”也算一个参数)
    // argv[0] - 可执行文件名; argv[1] - 参数1; argv[2] - 参数2; argv[3] - 参数3

    // 返回 0 代表正常
    return 0; 
}

OK
[源码下载]

Windows Native (1),windowsnative [源码下载] 必不可缺 Windows Native (1卡塔尔(قطر‎ - C 语言: hello c 作者:webabcd 介绍 必不可少 Windows Native之 C 语言 在...

C#中运用aria2c实行下载并显示进程条 - 云平台知识库 - 今日头条

文本准备:

linux-2.6.14.tar.bz2 下载地址:

arm-linux-gcc-3.4.1.tar.bz2 http://www.linuxidc.com/Linux/2010-07/26990.htm

gcc4.1(包含文件cpp-4.1_4.1.2-27Ubuntu1_i386.deb、g -4.1_4.1.2-27ubuntu1_i386.deb、gcc-4.1_4.1.2-27ubuntu1_i386.deb、gcc-4.1-base_4.1.2-27ubuntu1_i386.deb、libstdc 6-4.1-dev_4.1.2-27ubuntu1_i386.deb)下载

busybox-1.19.2.tar.bz2
http://www.linuxidc.com/Linux/2011-08/40704.htm

skyeye-1.2.4_Rel.tar.gz 与cs8900.c、cs8900.h、dev_net_cs8900a.c下载见

免费下载地址在

客户名与密码都以www.linuxidc.com

切实下载目录在 /二〇一二年龄经历料/3月/26日/在SkyEye上运营ARM Linux图解教程/

 

总结是:
1,雷同就跳到函数的起来:(假使都以左括号照旧都以右括号),区别就跳到函数的结尾:
     { 和 } 用来跳到函数的始发。
     [] 和 ][ 用来跳到函数的末尾。
2,左右左右,“左”在前面。前后左右,“前”也在前面。由此左括号打头则象征向前,右括号打头则代表向后:
     [[ 和 [] 用来向前跳
     ]] 和 ][ 用来向后跳

 

详细步骤:

组合起来就是:
[[ 用来跳到光标前边的二个函数开始处。假诺光标在函数体内的话,那正是所在函数的开始处。
][ 用来跳到光标前边的贰个函数结尾处。假设光标在函数体内的话,这正是所在函数的结尾处。
]] 用来跳到光标前边的贰个函数开头处。借使光标在函数体内的话,那正是下八个函数的开始处。
[] 用来跳到光标后面包车型地铁叁个函数结尾处。要是光标在函数体内的话,那正是上一个函数的结尾处。

正则表达式的生成网址:

1 编译linux-2.6.14.tar.bz2

将arm-linux-gcc-3.4.1.tar.bz2解压,将内部的arm目录移动到/usr/local下。

将linux-2.6.14.tar.bz2解压到工作目录。

上面编写翻译linux:

1)修改Makefile,ARCH ?= arm CROSS_COMPILE ?= /usr/local/arm/3.4.1/bin/arm-linux-

2)make smdk2410_defconfig

3)为内核增加cs87900网卡驱动以支撑NFS

图片 1

图片 2

图片 3

图片 4

图片 5

4卡塔尔(英语:State of Qatar)校勘内核文件

图片 6

5)裁剪/定制内核

图片 7

makemenuconfig进度中或然提醒需You must install ncurses-devel in order,解除办法是:apt-get install libncurses5-dev。

图片 8

6) 编译

Make,在linux顶目录生成vmlinux文件,那正是所供给的arm-linux内核。编写翻译结果如下:

图片 9

图片 10

1,先想是想往前跳,照旧今后跳?
比方是想往前,就摁 [,若是是想未来,就摁 ],然后指头别放手。
2,再想是想开初步处,依旧结尾处?
倘若是起始处,就再摁一下。若是是结尾处,就摁另三个键。

“cscope find”的用法:

 Aria2c下载地址:

    cs find c|d|e|f|g|i|s|t name
    0 或 s 查找本 C 符号(可以跳过注释卡塔尔(قطر‎
    1 或 g 查找本定义
    2 或 d 查找本函数调用的函数
    3 或 c 查找调用本函数的函数
    4 或 t 查找本字符串
    6 或 e 查找本 egrep 模式
    7 或 f 查找本文件
    8 或 i 查找富含本文件的文书

然则哪个人也不想敲这么多命令吧,所以自个儿在vimrc中建了这么一个映射:

保存的职位:程序运营目录/Download

nmap <C-@>s :cs find s <C-R>=expand("<cword>")<CR><CR>:copen<CR>
nmap <C-@>g :cs find g <C-R>=expand("<cword>")<CR><CR>
nmap <C-@>c :cs find c <C-R>=expand("<cword>")<CR><CR>:copen<CR>
nmap <C-@>t :cs find t <C-R>=expand("<cword>")<CR><CR>:copen<CR>
nmap <C-@>e :cs find e <C-R>=expand("<cword>")<CR><CR>:copen<CR>
nmap <C-@>f :cs find f <C-R>=expand("<cfile>")<CR><CR>:copen<CR>
nmap <C-@>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>:copen<CR>
nmap <C-@>d :cs find d <C-R>=expand("<cword>")<CR><CR>:copen<CR>

 

实在正是参照 cscope_maps.vim 那一个文件,大家能够去下载她,然后直接放到plugin目录就能够。

Program.cs

当光标停在有个别你要探究的词上时, 按下<C-_>g, 正是搜求该对象的定义, 其余的同理.
按这种组合键有有些本事,按了<C-_>后要立即按下二个键,不然显示器一闪就回去nomal状态了
<C-_>g的按法是先按"Ctrl Shift -", 然后高速再按"g"

        static void Main(string[] args)
        {
            var url = "http://dldir1.qq.com/weixin/Windows/WeChatSetup.exe";
            if (url != "")
            {
                var fileName = url.Substring(url.LastIndexOf("/")   1);
                var r = HttpDownLoad.DownloadFileByAria2(url, string.Format("{0}\Download\{1}", Directory.GetCurrentDirectory(), fileName));
                Console.WriteLine(r);
                Console.ReadLine();
            }
        }



vimcdoc.sourceforge.net
cscope.sourceforge.net

 

1、首先,大家要做的是生成cscope文件。
Windows和Linux下都如出生龙活虎辙,首先定位到您的源代码所在的目录。若是您的源文件里唯有.c和.h文件,那么运行下边包车型大巴命令。
cscope -Rbq
就能够生成cscope.out文件。
假诺有.cpp的源文件,请参谋上面包车型客车步调。Windows在本文下边下载find.exe程序,权且代替系统自带的find.exe程序。在源代码目录下运作如下的通令:
find ./ -name "*.c" -o -name "*.cpp" -o -name "*.h" > cscope.files
生成cscope.files后再运行命令:
cscope -bq
就能够变动三个文本,cscope.out以外的其他五个是加速索引的。
346M -rw-rw-r--   1 op op 346M Apr 30 14:28 cscope.out
 71M -rw-rw-r--   1 op op  71M Apr 30 14:28 cscope.in.out
485M -rw-rw-r--   1 op op 485M Apr 30 14:28 cscope.po.out

 HttpDownLoad.cs

2、在vimrc里配置cscope的使用
率先,张开vimrc文件,那是vim的安排文件。不领悟的请参见本类别的前头几篇随笔。
在vimrc文件里增加如下的话语:
"cscope设置
set cscopequickfix=s-,c-,d-,i-,t-,e-
cs a D:/minixsource/cscope.out D:/minixsource
自然,你得把路子改成你和谐的源代码路线。好了,在指令行里输入:
:cs f g boot
就足以查阅boot(卡塔尔那一个函数的定义了。再输入:
:cs f c boot
就足以查看boot(卡塔尔函数被调用的地点了。是否很有利啊?但是你能够更有益于的举办查找,利用急迅键!要选择连忙键,大家还要对它进行配置。在vimrc文件里再增加如下的言语:
nmap s :cs find s =expand(""卡塔尔国 :cw    "查找申明
nmap g :cs find g =expand(""卡塔尔(英语:State of Qatar) :cw     "查找定义
nmap c :cs find c =expand(""卡塔尔(قطر‎ :cw    "查找调用
nmap t :cs find t =expand(""卡塔尔国 :cw    "查找钦赐的字符串
nmap e :cs find e =expand(""卡塔尔 :cw    "查找egrep格局,相当于egrep功用,但寻觅速度快多了
nmap f :cs find f =expand(""卡塔尔国 :cw    "查找文件
nmap i :cs find i ^=expand(""卡塔尔$ :cw   "查找包涵本文件的文书
nmap d :cs find d =expand(""卡塔尔国  :cw   "查找本函数调用的函数
动用方面包车型客车飞快键的诀要是,将光标定位到您要搜索的变量,函数名恐怕宏定义名处。先按下Ctrl /,甩手后神速按下相应的键,例如按下g,表示查找该函数大概变量的定义;按下c表示查找本函数被调用的地点。功能很刚劲。

using System;
using System.Diagnostics;
using System.IO;
using System.Text.RegularExpressions;

namespace ConsoleApplication2
{
    public class HttpDownLoad
    {
        /// <summary>
        /// 功能:使用Aria2c进行文件下载
        /// 作者:黄海
        /// 时间:2018-06-13
        /// </summary>
        /// <param name="url"></param>
        /// <param name="strFileName"></param>
        /// <returns></returns>
        public static bool DownloadFileByAria2(string url, string strFileName)
        {
            var tool = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)   "\aria2-1.34.0-win-64bit-build1\aria2c.exe";
            var fi = new FileInfo(strFileName);
            var command = " -c -s 10 -x 10  --file-allocation=none --check-certificate=false -d "   fi.DirectoryName   " -o "   fi.Name   " "   url;
            using (var p = new Process())
            {
                RedirectExcuteProcess(p, tool, command, (s, e) => ShowInfo(url,e.Data));
            }
            return File.Exists(strFileName) && new FileInfo(strFileName).Length>0;
        }
        private static void ShowInfo(string url,string a)
        {
            if (a == null) return;

            const string re1 = ".*?"; // Non-greedy match on filler
            const string re2 = "(\(.*\))"; // Round Braces 1

            var r = new Regex(re1   re2, RegexOptions.IgnoreCase | RegexOptions.Singleline);
            var m = r.Match(a);
            if (m.Success)
            {
                var rbraces1 = m.Groups[1].ToString().Replace("(", "").Replace(")", "").Replace("%", "").Replace("s","0");
                if (rbraces1 == "OK")
                {
                    rbraces1 = "100";
                }
                Console.WriteLine(DateTime.Now.ToString().Replace("/","-") "    " url "    下载进度:" rbraces1 "%");
            }
        }

        /// <summary>
        /// 功能:重定向执行
        /// </summary>
        /// <param name="p"></param>
        /// <param name="exe"></param>
        /// <param name="arg"></param>
        /// <param name="output"></param>
        private static void RedirectExcuteProcess(Process p, string exe, string arg, DataReceivedEventHandler output)
        {
            p.StartInfo.FileName = exe;
            p.StartInfo.Arguments = arg;

            p.StartInfo.UseShellExecute = false;    //输出信息重定向
            p.StartInfo.CreateNoWindow = true;
            p.StartInfo.RedirectStandardError = true;
            p.StartInfo.RedirectStandardOutput = true;

            p.OutputDataReceived  = output;
            p.ErrorDataReceived  = output;

            p.Start();                    //启动线程
            p.BeginOutputReadLine();
            p.BeginErrorReadLine();
            p.WaitForExit();            //等待进程结束
        }
    }
}

VIM CSCOPE

分类: LINUX系统使用与管理 2014-11-16 22:02 277人阅读 评论(0) 收藏 举报

在Windows下有非常多好用的IDE,比方Visual Studio(加上Visual Assist 简直好用到没对象),或无需付费的source insight,他们都使得看代码时,可以轻便的搜寻符号(变量,函数名,宏等)的概念与援用。

Linux下也可能有为数不菲免费且强大的IDE,诸如Eclipse,Code::Blocks,他们都亟需相当的设置,进程大概很麻烦。幸运的是,Linux上自带了CSCOPE,让我们轻便浏览代码,查找符号的定义与引用。

CSCOPE是足以独自运营的,而鉴于VIM是主流编辑器,将他们结成在联合具名更有益于,以下陈诉的秘技是将CSCOPE作为VIM的插件运维。

 

Pathogen

是因为要用到VIM插件,这里先引入二个插件管理工科具pathogen:

 从GitHub下载来,只要放到~/.vim/里就能够。那样pathogen.vim就存在于: ~/.vim/autoload/pathogen.vim

当有任何插件时,在~/.vim/bundle/下成立三个目录,并将插件归入该目录即能运作。

比如cscope的插件cscope_maps.vim,创立二个目录~/.vim/bundle/cscope_maps/并将cscope_maps.vim放入:~/.vim/bundle/cscope_maps/plugin/中:

~/.vim/bundle/cscope_maps/plugin/cscope_maps.vim

 

CSCOPE

查阅一下本机是还是不是已安装cscope工具,在纳瓦拉HEL上可观察:

# rpm -qa|grep"cscope"

cscope-15.8-7.el7.x86_64

 

先看看CSCOPE的独门使用:

cd 到有个别目录,推行:

# Cscope -R

  • *

cscope即递归子目录中的文件,生成二个符号库文件cscope.out,况且还自行步入cscope的相互页面,如图呈现了cscope的命令集:

图片 11

可输入要物色的暗记定义或援引,用tab上下切换结果集和命令集。按 CTTiggoL d 退出该分界面。

 

生成符号库相关命令有:

-Highlander 递归全体子目录中的文件。

-q 生成倒排索引,使得符号查找更加快,用那一个命令后会多生成多个公文:cscope.in.out, cscope.po.out。

-b 生成符号库,但不自行步向互相分界面。

-i 从文件列表中生成符号库 (首要)。

 

从文件列表生成符号库:

CSCOPE暗许只认 *.h, *.c 文件,那要是其他诸如C 或JAVA工程难道就不可能用了?借使是那般,那它也不值得被这么大规模推荐了。幸亏它提供了–i 选项,对于其余工程,大家先生成三个文件列表。例如C ,那几个列表包蕴文件类型为 *.h, *.c, *.cpp, *.hpp:

# find . -name ".c" -o -name "*.cpp"-o -name "*.hpp" -o -name "*.h" > cscope.files*

 

接下来用钦命的文本列表生成符号库:

# cscope -q -b -i cscope.files

 

和VIM集成:

前方说过CSCOPE能够独立选取,它和VIM集成不外乎在VIM里用连忙键或指令达成符号的查找,即上述人机联作分界面包车型地铁职能。

 

步骤:

(1)      下载cscope插件:

(2)      按pathogen的要求插手相应目录。

(3)      用VIM张开文件,那么,在VIM里CSCOPE怎样精晓符号文件cscope.out在哪吧?查看cscope_maps.vim,可看出生机勃勃段脚本:

" add any cscope database in current directory

if fileradable("cscope.out")

cs add cscope.out

" else add the database pointed to by environment variable

elseif $CSCOPE_DB  != ""

    cs add $CSCOPE_DB

endif

 

可以知道CSCOPE会自动加载文件所在目录下的符号库,若无,则尝试情状变量$CSCOPE_DB 所定义的符号库。我们得以选大器晚成种格局。

假如期望聚集管理七个品类的符号库,能够安装情形变量$CSCOPE_DB ,为了使该变量永世有效,将其步向/etc/profile里:

export CSCOPE_DB="/cscope_symbols/project_1/cscope.out"

保留退出后重载一下配置:

# source /etc/profile

 

(4卡塔尔 这时候,展开VIM,查看已加载的符号库:

:cs show

 

用add还可增添此外库:

:cs add [symbol_path]

 

(5卡塔尔(英语:State of Qatar) 这时候,能够用命令或快捷键实现符号查找了,比方命令查找my_variable:

:cs f s my_variable

 

里面: f 表示find;s表示符号,g表示查找定义,c查找函数调用者,越来越多请 :help cscope.

除此以外,改 :cs 为 :scs 则切分窗口显示将跳转到的搜索。

快捷键:

打开~/.vim/bundle/cscope_maps/plugin/cscope_maps.vim,可观看它定义了风华正茂层层连忙键来得以完毕上述的标志查找:

    nmap <C->s :cs find s <C-R>=expand("<cword>")<CR><CR>          
    nmap <C->g :cs find g <C-R>=expand("<cword>")<CR><CR>          
    nmap <C->c :cs find c <C-R>=expand("<cword>")<CR><CR>                                                      
    nmap <C->t :cs find t <C-R>=expand("<cword>")<CR><CR>                                                      
    nmap <C->e :cs find e <C-R>=expand("<cword>")<CR><CR>          
    nmap <C->f :cs find f <C-R>=expand("<cfile>")<CR><CR>          
    nmap <C->i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>
    nmap <C->d :cs find d <C-R>=expand("<cword>")<CR><CR>

在VIM中,当光标停在某符号上,按:

CTRL , 然后按‘s’,即为对应的一声令下:cs f s [symbol]

CTRL , g, 即为 :cs f g [symbol]

CTRL , c, 即为 :cs f c [symbol]

...

将 ‘’换到空格,则对应了:scs,比方:

CTRL 空格,s,即为 :scsf s [symbol]

 

Tips:

(1) 假设步向了VIM发掘符号查找未有结果,检查一下符号库是还是不是精确加载了 :cs show

(2) VIM运维时可能会警示:找到五个符号库:

line 45:E568: duplicate cscope database not added

想要屏蔽该警示,改进~/.vim/bundle/cscope_maps/plugin/cscope_maps.vim:

将:***


set cscopeverbose

改为:

set nocscopeverbose

 

 

参考文献:

(1)    The Vim/Cscope tutorial:

(2)    Cscope – A developer’s tool forbrowsing source code):

(3)    Avoiding duplicate cscope databaseerror within VIM:

 

 

~/.vimrc文件增多上面内容:

nmap <C-_>s :cs find s <C-R>=expand("<cword>")<CR><CR>
nmap <C-_>g :cs find g <C-R>=expand("<cword>")<CR><CR>
nmap <C-_>c :cs find c <C-R>=expand("<cword>")<CR><CR>
nmap <C-_>t :cs find t <C-R>=expand("<cword>")<CR><CR>
nmap <C-_>e :cs find e <C-R>=expand("<cword>")<CR><CR>
nmap <C-_>f :cs find f <C-R>=expand("<cfile>")<CR><CR>
nmap <C-_>i :cs find i <C-R>=expand("<cfile>")<CR><CR>
nmap <C-_>d :cs find d <C-R>=expand("<cword>")<CR><CR>
~                                                                                                                                                                                                                                            
~                                                                    

 

本文由星彩网app下载发布于计算机编程,转载请注明出处:供给,Linux图解教程

TAG标签:
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。