AoboSir 博客

与15年前的我比,我现在是大人;与15年后的我比,我现在还是个婴儿

Learning Pcduino 002 给pcduino烧写系统 — 之 烧写Ubuntu 14系统


  • 我使用的pcduino板卡型号:pcduino 3B
  • 我使用的TF卡大小:32G

参考网站:


下载需要的东西

下载 系统镜像文件 和 必要的烧写工具。(我使用的下载软件是迅雷,不是浏览器自带的下载器)

以我现在使用的板子(pcduino3B)为例,所以在这个网站里面下载。需要现在三个东西:

  1. 一个是系统镜像文件。
  2. 一个烧写工具。

如果你使用的不是pcduino3B板子,那么请到 这个网站里选择你使用的板子,到对应的板子链接里下载对应板子的内核镜像文件、系统镜像文件和必要的烧写工具。

Step 1 . 下载镜像文件

镜像文件选择下面的 Ubuntu 14 下载:(注意,这个Ubuntu 14 只需要下载这个文件即可,因为它是一个 内核+系统 的镜像文件。)

Alt text

Step 2 . 下载烧写工具

所以,我下载 PhoenixCard 烧写工具:(烧写工具在网页的下面,往下滚就能看到。)

Alt text

注意:注意它的下载提示。如果是给pcduino3系列使用,必须要使用 Phonenix card这个 软件的 V309 版本。很不错的是:这个下载链接默认下载的就是 Phonenix card V309。


给pcduino板子烧写Ubuntu 14系统

Step 1 . 用读卡器将TF卡(小型的SD卡)连接到电脑。(必须)使用SD Formatter工具(专业格式化SD卡的软件)对TF卡进行格式化。

SD Formatter工具具体的下载、安装和使用,请到这篇博客中进行了解。

Step 2 . 烧写工具 PhoenixCard 下载完,解压后,直接双击PhoenixCard.exe就可以启动 PhoenixCard烧写软件。

点击镜像文件按钮,选择刚刚下载解压后的镜像文件。

然后点击 烧录 按钮,进行烧录。(大于5分钟时间。)

Step 3 . 将TF卡插到pcduino板子上,只给板子供电即可。

注意:

  • pcduino板子只需要插上TF卡和接通电源即可,其他的什么设备都不需要连接。
  • 接通电源一定要是5V2A,最好是使用充电宝或者充电头直接给板子供电。不可以使用电脑USB接口给板子供电。因为电流不够。
  • 如果你真的使用电脑的USB接口给板子供电,后面板子安装系统镜像的时候,是不会成功的。

Alt text

中间的LED4(TX)一1秒的间隔闪烁,说明正在烧写内核和系统程序(pcduino板子全自动烧写),大约不到3分钟左右,中间这个LED不再闪烁(熄灭),说明:内核和系统烧写完成。这时拔下TF卡,再将pcduino板子断开电源。

Step 4 . 给pcduino板子连接显示器,再接通电源:(这时pcduino板子还不插TF卡)

Ubuntu 14系统成功运行。

搞定

Learning Pcduino 001 给pcduino烧写系统 — 之 烧写Ubuntu NAND系统


  • 我使用的pcduino板卡型号:pcduino 3B
  • 我使用的TF卡大小:32G

参考网站:

下载需要的东西

下载 内核镜像文件、系统镜像文件 和 必要的烧写工具。(我使用的下载软件是迅雷,不是浏览器自带的下载器)

以我现在使用的板子(pcduino3B)为例,所以在这个网站里面下载。需要现在三个东西:

  1. 一个内核文件镜像文件。
  2. 一个是系统镜像文件。
  3. 一个烧写工具。

如果你使用的不是pcduino3B板子,那么请到 这个网站里选择你使用的板子,到对应的板子链接里下载对应板子的内核镜像文件、系统镜像文件和必要的烧写工具。

Step 1 . 下载Kernel(内核)镜像文件

下面的4个都是同一个内核文件,随便点击一个下载即可。(这里面说的:PhoenixCard 就是烧写工具)

Alt text

注意:如果你给pcduino板子连接的是LVDS Screen显示屏,那么你需要下载的是上面图片中的LVDS ScreenKernel内核文件。

Alt text

Step 2 . 下载烧写工具

所以,我下载 PhoenixCard 烧写工具:(烧写工具在网页的下面,往下滚就能看到。)

Alt text

注意:注意它的下载提示。如果是给pcduino3系列使用,必须要使用 Phonenix card这个 软件的 V309 版本。很不错的是:这个下载链接默认下载的就是 Phonenix card V309。

Step 3 . 下载镜像文件

镜像文件随便选择一个 Ubuntu NAND 下载即可:(注意,要对应上面下载的内核文件。)

Alt text


给pcduino板子烧写内核

Step 1 . 用读卡器将TF卡(小型的SD卡)连接到电脑。(必须)使用SD Formatter工具(专业格式化SD卡的软件)对TF卡进行格式化。

Alt text

SD Formatter工具具体的下载、安装和使用,请到这篇博客中进行了解。

Step 2 . 烧写工具 PhoenixCard 下载完,解压后,直接双击PhoenixCard.exe就可以启动 PhoenixCard烧写软件:

Alt text

Alt text

Step 3 . 给TF卡烧写Kernel(内核)镜像

Alt text

Step 4 . 将TF卡从电脑上拔下来,将TF卡插到pcduino板子上,给pcduino板子上电。

注意:

  • pcduino板子只需要插上TF卡和接通电源即可,其他的什么设备都不需要连接。
  • 接通电源一定要是5V2A,最好是使用充电宝或者充电头直接给板子供电。不可以使用电脑USB接口给板子供电。因为电流不够。
  • 如果你真的使用电脑的USB接口给板子供电,后面板子安装系统镜像的时候,是不会成功的。

Alt text

Alt text

中间的LED4(TX)一1秒的间隔闪烁,说明正在烧写内核程序(pcduino板子全自动烧写),大约不到23秒钟左右,中间这个LED不在闪烁,说明:内核文件烧写完成。这时拔下TF卡,再将pcduino板子断开电源。


给pcduino板子烧写Ubuntu NAND系统

Step 1 . 再将TF卡通过读卡器连接到电脑,然后使用上面同样的方法(用SD Formatter软件)对TF卡进行格式化操作。

Step 2 . 选择要烧写的镜像文件

将解压后的系统镜像文件(pcduino3_ubuntu_20140807.imgupdate.sh)直接拷贝到TF卡上。

Alt text

Step 3 . 检查 update.sh 文件

如果你下载的这个:

Alt text

我们现在使用记事本软件打开update.sh 启动文件,检查里面指定的镜像文件名是否正确,可以看到,我现在这个情况,是不正确的:

Alt text

如果我们TF卡根目录里面的镜像文件名为:pcduino3nano_ubuntu_20140807.img。所以我们需要手动修改update.sh 文件:

将其修改为下面这样,并保存文件。

Alt text

总之,这一步(Step 3 . )的目的就是:让update.sh文件里面的IMG变量指向正确的镜像文件路径。

注意: 如果你使用的镜像文件是:pcduino3_ubuntu_20140807.img,它是有GUI界面的;如果你使用的镜像文件是pcduino3nano_ubuntu_20140807.img,它是没有GUI界面的,它只有命令行界面。

Step 4 . 给pcduino板子连接显示器,再接通电源:(这时pcduino板子还不插TF卡)

Alt text

这时观察pcduino连接的显示屏,当出现下面的信息时:

Alt text

Step 5 . 现在将烧写好的系统的TF卡插到pcduino板子上。然后pcduino自动将TF卡里面的系统镜像安装到pcduino芯片里。(等待大约8分钟)

当你看看到下面的信息的时候,说明系统已经安装完成了。

Alt text

Step 6 . 这个时候,关闭电源,你可以将SD卡去下来(TF卡已经没有用了,你可以把它扔了,呵呵)。

现在,给板子重新上电,板子自动运行系统。

Alt text

搞定


参考网站:

Learning Pcduino 000 Pcduino板卡介绍 — Pcduino 3B


什么是pcduino

pcduino = mini PC + Arduino

简单的说,就是一个板子,它所具有的功能 等价于:一个装有系统的微型笔记本电脑再连接一个Arduino UNO 的板子。

pcduino 3B

Alt text

购买网站:pcDuino3B A20开发板

pcduino3 与 pcduino3B 的唯一区别就是:pcduino3B有一个大型集成的RJ45网络端口。(其他和pcduino3一模一样)

Alt text

pcduino 3B 的官方介绍网站: LinkSprite pcDuino3 (pcduino3 包括:pcduino3 和 pcduino3B)

pcduino 官网的教程资料网站:LinkSprite pcDuino Quick Start

pcduino 中文教程网站:维基 pcduino 中文书

pcduino 教学的pdf:

pcduino sparkfun网站的tutorials:Programming the pcDuino

Search Results for “pcduino3b”

Learning Linux 命令 001 Cp 复制


将单个文件 file 复制到指定目录dir里面:

1
cp file dir

当你使用cp命令的时候,如果出现下面的错误:

cp: omitting directory ‘file’

说明:file 不是单个文件,是一个目录,你如果要复制目录,需要给cp命令加一个参数 -r

将目录 dir1 复制到 指定目录 dir2 里面:

1
cp -r dir1 dir2

C# 003 C#调用cmd.exe执行命令


  • 我使用的电脑:Windows 10 64位
  • 使用的Visual Studio 软件: VS2010

参考网站:C#程序调用cmd.exe执行命令

创建一个文件,名为:RunCmd.cs。将下面的代码拷贝到里面。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;

namespace AoboSir
{
    class RunCmd
    {
        public RunCmd()
        {

        }

        private static string CmdPath = @"C:\Windows\System32\cmd.exe";

        /// <summary>
        /// 执行cmd命令
        /// 多命令请使用批处理命令连接符:
        /// <![CDATA[
        /// &:同时执行两个命令
        /// |:将上一个命令的输出,作为下一个命令的输入
        /// &&:当&&前的命令成功时,才执行&&后的命令
        /// ||:当||前的命令失败时,才执行||后的命令]]>
        /// 其他请百度
        /// </summary>
        /// <param name="cmd"></param>
        /// <param name="output"></param>
        public void run(string cmd, out string output)
        {
            cmd = cmd.Trim().TrimEnd('&') + "&exit";//说明:不管命令是否成功均执行exit命令,否则当调用ReadToEnd()方法时,会处于假死状态
            using (Process p = new Process())
            {
                p.StartInfo.FileName = CmdPath;
                p.StartInfo.UseShellExecute = false;        //是否使用操作系统shell启动
                p.StartInfo.RedirectStandardInput = true;   //接受来自调用程序的输入信息
                p.StartInfo.RedirectStandardOutput = true;  //由调用程序获取输出信息
                p.StartInfo.RedirectStandardError = true;   //重定向标准错误输出
                p.StartInfo.CreateNoWindow = true;          //不显示程序窗口
                p.Start();//启动程序

                //向cmd窗口写入命令
                p.StandardInput.WriteLine(cmd);
                p.StandardInput.AutoFlush = true;
                //p.StandardInput.WriteLine("exit");
                //向标准输入写入要执行的命令。这里使用&是批处理命令的符号,表示前面一个命令不管是否执行成功都执行后面(exit)命令,如果不执行exit命令,后面调用ReadToEnd()方法会假死
                //同类的符号还有&&和||前者表示必须前一个命令执行成功才会执行后面的命令,后者表示必须前一个命令执行失败才会执行后面的命令

                //获取cmd窗口的输出信息
                output = p.StandardOutput.ReadToEnd();
                p.WaitForExit();//等待程序执行完退出进程
                p.Close();
            }
        }
    }
}

我们可以这样使用这个RunCmd 类:

在GUI界面里面添加一个按钮,然后在对应的.cs 文件的程序,就类似于下面这个样子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using AoboSir;

namespace learningcs003
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        RunCmd runcmd = new RunCmd();

        private void button1_Click(object sender, EventArgs e)
        {
            string commond, output;
            commond = @"notepad.exe";
            runcmd.run(commond, out output);
            //MessageBox.Show(output);
        }
    }
}

运行的功能是:启动 记事本 软件。


Learning Python 028 获取命令行参数


  • 使用的电脑系统:Windows 10 64位
  • 使用的开发集成环境:PyCharm 2016.1.4
  • 使用的Python的版本:python2.7.10 或者 python 3.5.0

本博文对Python2和Python3都适用。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import optparse

def main():
    parser = optparse.OptionParser('usage%prog ' +\
                                   '-f <zipfile> -d <dictionary>')
    parser.add_option('-f', dest='zname', type='string',\
                      help='specify zip file')
    parser.add_option('-d', dest='dname', type='string',\
                      help='specify dictionary file')
    (options, args) = parser.parse_args()
    if (options.zname == None) | (options.dname == None):
        print(parser.usage)
        exit(0)
        pass
    else:
        zname = options.zname
        dname = options.dname
        dlist = dname.split(',')
        pass
    print('zname is ', zname)
    print('dname is ', dname)
    print('dlist is ', dlist)
    pass

if __name__ == '__main__':
    main()
    pass

Python3 的运行结果:

1
2
3
4
>python learningpython28.py -f aobo  -d sir,patty,re
zname is  aobo
dname is  sir,patty,re
dlist is  ['sir', 'patty', 're']

Python2 的运行结果:

1
2
3
4
>C:\Python27\python.exe learningpython28.py -f aobo -d sir,patty,re
('zname is ', 'aobo')
('dname is ', 'sir,patty,re')
('dlist is ', ['sir', 'patty', 're'])

下面这个几个命令运行的效果是一样的:(Python2 和 Python3 运行的效果都一样)

1
2
3
4
>python learningpython28.py -h
>python learningpython28.py --h
>python learningpython28.py --help
>python learningpython28.py -help

运行结果:

1
2
3
4
5
6
Usage: usagelearningpython28.py -f <zipfile> -d <dictionary>

Options:
  -h, --help  show this help message and exit
  -f ZNAME    specify zip file
  -d DNAME    specify dictionary file

注意:如果传入的参数是string类型的,最好使用"" 引上

为什么? 因为字符串里面难免可能会有 (空格),所以,最好使用""(双引号)引上。

1
2
3
4
>python learningpython28.py -f "aobo fd g" -d "ava,dssd,hg"
zname is  aobo fd g
dname is  ava,dssd,hg
dlist is  ['ava', 'dssd', 'hg']

如果你用单引号或者不用引号,虽然说运行不会报错,但是运行的结果就不是你想要的。

1
2
3
4
>python learningpython28.py -f 'aobo fd g' -d 'ava,dssd,hg'
zname is  'aobo
dname is  'ava,dssd,hg'
dlist is  ["'ava", 'dssd', "hg'"]
1
2
3
4
>python learningpython28.py -f aobo fd g -d ava,dssd,hg
zname is  aobo
dname is  ava,dssd,hg
dlist is  ['ava', 'dssd', 'hg']

Learning Python 026 字符串连接


  • 使用的电脑系统:Windows 10 64位
  • 使用的开发集成环境:PyCharm 2016.1.4
  • 使用的Python的版本:python2.7.10 或者 python 3.5.0

本博文对Python2和Python3都适用。


参考网站:Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)

1
2
3
4
5
6
7
8
9
# -!- coding: utf-8 -!-

path = r'D:\WorkSpace\test_ws\笔记\text.md'
delimiter = '\\'

mylist = path.split(delimiter)
res_path = delimiter.join(mylist[:-1])
# res_path = res_path.decode('utf-8').encode('GB18030') # 如果是适用python2在windows系统上运行,需要将这样注释去掉,否则你会得到中文乱码
print(res_path)

运行输出:

1
D:\WorkSpace\test_ws\笔记

Learning Python 025 字符串分割


  • 使用的电脑系统:Windows 10 64位
  • 使用的开发集成环境:PyCharm 2016.1.4
  • 使用的Python的版本:python2.7.10 或者 python 3.5.0

本博文对Python2和Python3都适用。


参考网站:Python split()方法

Python split()通过指定分隔符对字符串进行切片,返回一个列表。

语法:

1
zifuchuang.split(str, num)
  • str 分隔符
  • num 分割次数

实例:

1
2
3
4
str = r'D:\WorkSpace\test_ws\Git(GitHub)'
l = str.split('\\')
print(l)
print(str.split('\\', 1))

输出:

1
2
['D:', 'WorkSpace', 'test_ws', 'Git(GitHub)']
['D:', 'WorkSpace\\test_ws\\Git(GitHub)']

Learning Python 024 判断文件和文件夹是否存在


  • 使用的电脑系统:Windows 10 64位
  • 使用的开发集成环境:PyCharm 2016.1.4
  • 使用的Python的版本:python2.7.10 或者 python 3.5.0

判断文件

1
2
3
import os
a = os.path.isfile(r'D:\WorkSpace\test_ws\ao.txt')
print(a)

或者下面的代码。(这两种方式是对于判断一个文件是否存在是等价的。)

1
2
3
import os
a = os.path.exists(r'D:\WorkSpace\test_ws\ao.txt')
print(a)

判断文件夹

1
2
3
import os
a = os.path.exists(r'D:\WorkSpace\test_ws')
print(a)