2024年11月8日星期五

Nvidia Tegra系列历代产品总结

历代Jetson系列产品,从Tegra K1开始(车载领域开始的产品是Tegra X2)









带宽变化

Tegra X2的架构图













Tegra Xavier的架构图

Tegra Orin的架构图


从2015年到2024年,几乎10年时间,不停的迭代,不断的升级性能,对下一代Thor很期待,不知道什么时候能看到Thor的TRM







2015年11月22日星期日

ARM64从源码编译docker

在X86_64机器fedora系统下,不要使用官方编译的rpm包,交叉编译bootstrap会出现异常,使用源码编译的go.

1.编译X86_64的go binary

cd /root
git clone https://github.com/golang/go
git checkout go1.4.2
cd src/
./make.bash //先编译一个go x86_64
mv /root/go /root/go1.4//因为go1.5beta代码固定了go路径

2.下载go1.5.1,使用go1.4为arm64交叉编译bootstrap,或者直接checkout go1.5.1

cd go/src/
GOOS=linux GOARCH=arm64 ./bootstrap.bash

3. 拷贝go-linux-arm64-bootstrap.tbz到Arm64机器上继续编译其他模块

scp go-linux-arm64-bootstrap.tbz xxx //
//下载go1.5.1代码
git checkout go1.5.1
cd go/src
GOROOT=/path/to/go/bootstrap
GOROOT_BOOTSTRAP=$GOROOT ./all.bash

4. 下载docker源码并编译

git clone https://github.com/jefby/docker.git
git checkout jefby-v1.9.1 //找到最新的v1.9.1版本
AUTO_GOPATH=1 ./hack/make.sh dynbinary //编译动态版本
./hack/make.sh binary //静态版本,根据github docker社区的评论,似乎是用Redhat系列不能用静态版本的,\
因为默认使用了devicemapper,而不是ubuntu使用的aufs


5. 需要安装glibc-static
在docker v1.9.1版本中,hack/make.sh dynbinary中依然依赖libc.a和libpthread.a库,所以需要\
安装glibc-static rpm包,提供这两个库~

6..修改hack/make.sh增加set -x
添加调试选项,进行debug,查看到底是什么地方出现错误

7.安装必须的一些pkg

yum install -y device-mapper-devel
yum install -y btrfs-progs-devel

8.docker pull 的时候提示错误Server error: Status 0 while fetching image layer
解决方法:
在/etc/hosts后面添加对docker网站的dns解析
162.242.195.84 index.docker.io
162.242.195.84 registry-1.docker.io

2015年7月19日星期日

Fedora 22 for arndale octa

Hello,everynoe.

I have made an image based Fedora 22 for arndale octa board.

Offical arndale octa board just provides the linaro ubuntu linux release , but i'm more familiar RHEL/Fedora/CentOS series,,so i take some time to port the fedora 22 to this board, and it works very good.

The image file is very easy to use,and supposes that you use the linux/mac osx ,you just insert your tf card, open the terminal and input follow commands:

dd if=Fedora22-arndale-octa-1G.img of=/dev/sdX bs=1M

when it dones,poll out the tf card and insert it to the board,boot it and it will work ok .Maybe you should upgrade the kernel and dtb files because the new 4.1-rc8 kernel is more efficient and good.please command follow:

  mount /dev/mmcblk1p2 /media
  cp uImage /media/
  cp board.dtb /media/



Besides:

2. uImage



2014年10月29日星期三

程序员开发工具

版本控制工具:
github,sourcetree

开发IDE:

VS2008(C、C++)、PyCharm(Python开发)

代码查看和编辑:

Subtime Text(推荐使用),EditPlus ,Vim

笔记:

有道云笔记,偶尔用下evernote,MarkdownPad Pro(windows下使用,体验很好)

虚拟机软件:

VMware,VirtualBox

串口调试和远程管理:

SecureCRT 5.0(串口连接),winscp(服务器/客户端之间传输文件)

2014年9月23日星期二

大疆笔试题目(嵌入式软件)


    嵌入式软件从整体上说出的难度不是很大,但是感觉出的题还是可以区分开纯软件和嵌入式工程师的,不废话,具体题目想不起来了,只能凭记忆回忆一些。
编程基础
    第一题目是在64位机上,使用32位编译器来编译,求占用内存的大小;如果使用64位编译器又如何?
struct {
int a;
char c;
unsigned short b;
char *p;
void(*p)(int);
};好像粗心做错了,尴尬。。。。
    第二道题目是container_of
    第三道题目是反转某一位。
    还有两道题目想不起来了。
嵌入式基础知识
1.       描述中断处理过程
2.       列举Linux内核态和用户态间通信的方法,你觉得最有效率的是哪一种??这个题不确定。
总线题目
1.       说出UARTI2CUSB总线的异同(全/半双工、串/并行、速率等)
2.       想不起来了
设计题目
已知一个系统中有两个UART接口,UART0UART1UART0是负责接收和回复,UART1是转发。已知有两个字段,一个是命令字段(2字节),一个是数据字段(0~128字节)。
(1)       设计通信数据包格式
(2)       在实时操作系统中,如何设计多个任务和缓存数据,请画出数据流图
(3)       如何设置优先级,说出优缺点

(4)       假如命令字段有高低优先级,重新设计。

2014年9月21日星期日

Linux用户空间和内核空间通信方式比较

资料整理:
1.       论文,主要比较通信方式
http://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=5696027
2.       stackoverflow部分讨论
3.       论文,主要讨论netlink
4.       介绍netlink的一篇博文,写的不错!
摘抄自4的博文:
netlink 相对于系统调用,ioctl 以及 /proc 文件系统而言具有以下优点:
1,为了使用 netlink,用户仅需要在 include/linux/netlink.h 中增加一个新类型的 netlink 协议定义即可, #define NETLINK_MYTEST 17 然后,内核和用户态应用就可以立即通过 socket API 使用该 netlink 协议类型进行数据交换。但系统调用需要增加新的系统调用,ioctl 则需要增加设备或文件,那需要不少代码,proc 文件系统则需要在/proc下添加新的文件或目录,那将使本来就混乱的 /proc 更加混乱。
2. netlink是一种异步通信机制,在内核与用户态应用之间传递的消息保存在socket缓存队列中,发送消息只是把消息保存在接收者的socket的接收队列,而不需要等待接收者收到消息,但系统调用与 ioctl 则是同步通信机制,如果传递的数据太长,将影响调度粒度。
3.使用 netlink 的内核部分可以采用模块的方式实现,使用 netlink 的应用部分和内核部分没有编译时依赖,但系统调用就有依赖,而且新的系统调用的实现必须静态地连接到内核中,它无法在模块中实现,使用新系统调用的应用在编译时需要依赖内核。
4netlink支持多播,内核模块或应用可以把消息多播给一个netlink组,属于该neilink 组的任何内核模块或应用都能接收到该消息,内核事件向用户态的通知机制就使用了这一特性,任何对内核事件感兴趣的应用都能收到该子系统发送的内核事件,在 后面的文章中将介绍这一机制的使用。
5.内核可以使用 netlink 首先发起会话,但系统调用和 ioctl 只能由用户应用发起调用。
6netlink 使用标准的 socket API,因此很容易使用,但系统调用和 ioctl则需要专门的培训才能使用。

                                                                                                      jefby


2014年9月19日星期五

阿里面试归来

    一面被问得比较尴尬,好多问题都没有答上来,例如假如有一个8核心的CPU,内存64GB,是使用hash表存储的数据,将其全部倒入内存后,如何让其发挥8核心的威力,你有什么方法?我回答了互斥锁,读写锁,然后试着使用8位的数来判断,还试着说了下ARM big.Little中使用的两种调度方法:GTSHMP但是明显我不了解其原理,面试官让我说具体逻辑的时候回答不上来,太弱了。然后问熟悉操作系统不,我说还行,就开始问了,内核中线程和进程有什么区别?我说进程在内核中是用struct task_struct结构体表示的,线程是轻量级的进程,表示方法应该都一样,然后面试官说这是操作系统书本上的知识,具体描述Linux内核下是怎么表示的?懵了。。线程不太懂啊,进程还知道一点点,亏大发了,然后小声说pthread库??这是应用层的,不算。哎,还是自己技术积累不够。接着问算法和数据结构,问了快排的原理和思路,然后问你能写快排么?我说我忘了,汗。。真忘了啊!!哎。。接着是问我知道C语言里面的mallocfree函数么,问free的时候为啥不用指定需要释放内存的大小,我回答说是因为有个类似表的结构记录申请的内存的,然后接着问我知道这表在操作系统中如何存储的,第一次回答错了,说是环形链表;马上纠正是哈希表。接着面试官继续提问,让我在纸上写代码,写一个类似于动态增长的栈一样的数据结构或者类,主要写它的增加函数,我开始写代码,大体思路是使用链表,然后每个链表节点里面存储一块固定大小的数据,每次增加的时候判断是否需要动态申请新的链表节点,然后按需插入即可。
    写完之后面试官开始问了我一点项目的东西,就叫我在外面等一会。等了一会之后,有人出来通知让到另一个地方去2面,等待的时候太揪心了,自己一面答得不太好,很幸运能获得2面的机会,2面等了很久,大约2小时40分钟的样子,2面的面试官先让我做自我介绍,我就说了下我的性格和研究方向,然后开始问毕设做的什么,我就开始讲我毕设相关的东西(基于云的路由器系统设计),让我画设计简图,然后描述我具体的工作是什么,叙述完后接着让我分析就是当前的作品存在的问题,还有和市场上的产品做对比,我说了个ninja block(幸亏前几天看啊。。^_^),╮(╯▽╰)╭,然后接着问研究生做过的项目和平时玩的一些硬件,2410,6410,5420啊啥的,主要问了我5420有关Android LCD驱动移植的思路和具体做法,我说由于时间不够,我只是自己研究了下,没有精力去开发,就让我叙述下思路。完了后开始问我的家庭地址和对工作地点的要求等等。然后问我有问题没,我就问了下系统工程师和运维一样么?面试官说阿里里面岗位都是互通的,可以根据方向和专业来调整。就让我出去等一会。
    等了一会就是HR面了,HR是个美女,看起来很亲切,比较轻松,聊了下工作意向和个人性格什么的,比较快,30分钟左右就完了,然后让我在外面稍微等一下,等了一会有工作人员通知我可以走了,说应该是过了,可以网上查看。终于松了一口气,早上10点到下午5点左右面完,感觉收获确实很多很多,见了一些牛人,面试官都循循善诱,让你发现表面事物下的原理!!很不错!!静待Offer。。希望早点发啊!!没拿到offer还是心虚的很!!

后记:已经拿到阿里系统工程师offer!!#_#很开心,昨天阿里上市,已经超越Facebook成全球第二大互联网公司!!太牛了!!

今天你对我爱理不理,明天我让你高攀不起!! --马云

2014/09/12
jefby