2016年12月29日 星期四

ARM的Memory劃分架構

http://www.programmer-club.com.tw/ShowSameTitleN/embedded/2447.html


ARM唯一有規定的是
Reset: 0x00000000
Undefined instructions: 0x00000004
Software interrupt: 0x000000008
Prefetch abort: 0x0000000C
Data abort: 0x00000010
IRQ: 0x00000018
FIQ: 0x0000001C
如果那一種ARM系列support high vector, 還可以調成從
0xFFFF0000開始

至於你說的flash/sdram 是有相關, 不過都要看implementation, ARM本身是不管
最後的週邊的 (即使SDRAM也是一樣), 這些是使用ARM core的SOC廠商訂定的, 
所以...沒有一定的標準, 大致上
會與ARM系列的memory co-processor有點關係, 
1. 如果是用protection unit, 會由SOC廠商訂出方法, 例如SAMSUNG 2510是設定
    0xF0000000的system register的bit 8來開關remap
2. 如果是以MMU的方式, 由於physical address和virual address是分離的, 所以是
   由軟體來設定即可, 例如OMAP850/OMAP2430

至於為何0x00000000-0x0000001F這麼重要, 從前面可以看出, 所以, 在沒設定好前,
interrupt是要在disable的狀態.

你想要瞭解memory mapping, 一定要針對某一顆SOC, 每一顆都不同, 不過請區分清楚
physical memory, remap, virtual memory
在有virtual memory的ARM系列, 不會再多做remap, 或從另一個角度而言, 如何從
virtual memory map到physical memory, 完全是軟體, 或software designer的事.

2016年12月28日 星期三

install Intel ethernet card driver

https://sourceforge.net/projects/e1000/files/igb%20stable/5.3.4.4/

http://blog.supportmonk.com/linux/update-intelr-gigabit-ethernet-network-driver-cent-os-6-5

Download the new driver from the link :http://sourceforge.net/projects/e1000/files/igb%20stable/5.2.9.4/
Unzip and compile the new module
tar -xzvf igb-5.2.9.4.tar.gz
cd igb-5.2.9.4/src
*Make sure server has the correct kernel-devel package corresponding to the installed kernel*
make install
—————————–
this will compile the module and place it at the default location /lib/modules/2.6.32-431.23.3.el6.x86_64/kernel/drivers/net/igb
*make sure you have the backup of the old binary as the above step replace original file*




If make error, maybe "make modules_prepare" helps.

2016年12月16日 星期五

[轉] 加入of_ (device tree操作api) 的platform驱动编写 基于gpio-keys


Linux在启动后,到C入口时,会执行以下操作,加载系统平台上的总线和设备:
start_kernel() --> setup_arch() --> unflatten_device_tree()  
在执行完unflatten_device_tree()后,DTS节点信息被解析出来,保存到allnodes链表中,allnodes会在后面被用到。随后,当系统启动到board文件时,会调用.init_machine,高通8974平台对应的是msm8974_init()。接着调用of_platform_populate(....)接口,加载平台总线和平台设备。

Device Tree 中的 I2C client 会透过 I2C host 驱动的 probe()函数中调用
of_i2c_register_devices(&i2c_dev->adapter);被自动展开
SPI host 驱动的 probe 函数透过
spi_register_master()注册 master 的时候,会自动展开依附于它的 slave。

整体platform驱动架构是这样的。platform bus一旦把platform driver里的of_device_id 
static struct of_device_id gpio_keys_of_match[] = {
{ .compatible = "gpio-keys", },
{ },
};
与dts(platform device)
gpio-keys {
compatible = "gpio-keys";
power {
label = "Power Button";
gpios = <&gpio3 29 1>;
linux,code = <116>; /* KEY_POWER */
gpio-key,wakeup;
};

volume-up {
label = "Volume Up";
gpios = <&gpio1 4 1>;
linux,code = <115>; /* KEY_VOLUMEUP */
};

volume-down {
label = "Volume Down";
gpios = <&gpio1 5 1>;
linux,code = <114>; /* KEY_VOLUMEDOWN */
};
};
里的compatible匹配到。则会调用platform里的probe成员函数
static int gpio_keys_probe(struct platform_device *pdev)
{
struct device *dev = &pdev->dev;
const struct gpio_keys_platform_data *pdata = dev_get_platdata(dev);
。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。
}
struct platform_device *pdev指向匹配成功的platform device.通过他我们可以找到对应于dts文件中的设备节点(定位到它就可以获取设备参数列表了)【因为新版内核struct device中包含了成员  struct device_node *of_node; /* associated device tree node */】
代码如下
gpio_keys_get_devtree_pdata(struct device *dev)
{
struct device_node *node, *pp;
struct gpio_keys_platform_data *pdata;
struct gpio_keys_button *button;
int error;
int nbuttons;
int i;

node = dev->of_node;
if (!node) {
error = -ENODEV;
goto err_out;
}

nbuttons = of_get_child_count(node);
if (nbuttons == 0) {
error = -ENODEV;
goto err_out;
}

pdata = kzalloc(sizeof(*pdata) + nbuttons * (sizeof *button),
GFP_KERNEL);
if (!pdata) {
error = -ENOMEM;
goto err_out;
}

pdata->buttons = (struct gpio_keys_button *)(pdata + 1);
pdata->nbuttons = nbuttons;

pdata->rep = !!of_get_property(node, "autorepeat", NULL);

i = 0;
for_each_child_of_node(node, pp) {
int gpio;
enum of_gpio_flags flags;

if (!of_find_property(pp, "gpios", NULL)) {
pdata->nbuttons--;
dev_warn(dev, "Found button without gpios\n");
continue;
}

gpio = of_get_gpio_flags(pp, 0, &flags);
if (gpio < 0) {
error = gpio;
if (error != -EPROBE_DEFER)
dev_err(dev,
"Failed to get gpio flags, error: %d\n",
error);
goto err_free_pdata;
}

button = &pdata->buttons[i++];

button->gpio = gpio;
button->active_low = flags & OF_GPIO_ACTIVE_LOW;

if (of_property_read_u32(pp, "linux,code", &button->code)) {
dev_err(dev, "Button without keycode: 0x%x\n",
button->gpio);
error = -EINVAL;
goto err_free_pdata;
}

button->desc = of_get_property(pp, "label", NULL);

if (of_property_read_u32(pp, "linux,input-type", &button->type))
button->type = EV_KEY;

button->wakeup = !!of_get_property(pp, "gpio-key,wakeup", NULL);

if (of_property_read_u32(pp, "debounce-interval",
&button->debounce_interval))
button->debounce_interval = 5;
}

if (pdata->nbuttons == 0) {
error = -EINVAL;
goto err_free_pdata;
}

Linux pin define tracing, in NV Jeston TX1 for example

線路圖上看到的腳位名稱,例如 GPIO6_TOUCH_INT
編號是B25, 這可以在腳位矩陣圖上找到。

但對於軟體設定時這都不是你想知道的。

你想知道的是使用nv source code時,他們預設把他定義到哪一根I/O(in this case, gpio)
好在dts裡直接使用

查法是這樣的。

檢查~/drivers/pinctrl/pinctrl-tegra210.c
(或pinctrl-[你的滿滿大平台].c)

尋找字串,in this case, TOUCH_INT,來到這行

#define TEGRA_PIN_TOUCH_INT_PX1     _GPIO(185)

那就能靠gpio 去註冊他了
例如
interrupt-parent = <&gpio>;
interrupts = <TEGRA_GPIO(X, 1) 0x0>;

2016年11月30日 星期三

BAUD rate things

"baud rate" is a common term for when people really mean "bit rate", or "bits per second".
A baud rate of 9600 means 9600 bits are sent per second.
The most common RS232 format requires 10 bits to send each byte, so at 9600 baud you can send 960 bytes per second.
A baud rate can also be expressed in kHz, so 9600 baud is 9.6 kHz. It means the same thing.

-----------------------------------------------------------------------------------------------------------
For transmitting the sending frequency can be the baud rate.

But for receiving, it helps to be able check the line at a greater rate, like 8 or 16 times the expected incoming baudrate.

That's because your goal is to sample the bit values around the center of their pulse. The more finely you can detect the time of the initial shift of the start bit, the more finely you can place the sampling instant near the center of each arriving bit.

So for a general purpose utility, either a discrete UART chip or software that both transmits and receives, the specified driving clock rate will likely be required to be 8 or 16 times the expected incoming baud.

2016年11月24日 星期四

Jetson-TX1 SDCard slot clk 調慢

~/arch/arm64/boot/dts/tegra210-platforms/tegra210-sdhci.dtsi


sdhci0: sdhci@700b0000 {
    tap-delay = <4>;
    trim-delay = <2>;
    max-clk-limit = <204000000>;
    /*** max-clk-limit = <降低成這個數字>; ***/
...
};

2016年10月5日 星期三

Tegra tegradc framebuffer fbset 配置 fb0 為 HDMI

Tegra K1 内建 2 個顯示控制器 tegradc.0 與 tegradc.1, R21.2 核心配置同時配置 framebuffer 裝置 fb0 與 fb1, tegradc.0 為 fb0, tegradc.1 為 fb1. 
ubuntu@tegra-ubuntu:~$ ls /dev/fb*
/dev/fb0 /dev/fb1
fb1 為 HDMI 顯示器. fb0 為 DSI WXGA 顯示器, 定義於 board-ardbeg-panel.c::ardbeg_panel_configure(). 
default:
        panel = &dsi_p_wuxga_10_1;
        tegra_io_dpd_enable(&dsic_io);
        tegra_io_dpd_enable(&dsid_io);
break;

When probe() get called?

http://stackoverflow.com/questions/7578582/who-calls-the-probe-of-driver

2016年9月23日 星期五

temp1

[3] Stopped vi dsi2lvds.c (wd: ~/jetson_tx1/kernel_sources/drivers/video/tegra/dc)
[5]+ Stopped vi tegra210-jetson-cv-power-tree-p2597-2180-a00.dtsi (wd: ~/jetson_tx1/kernel_sources/arch/arm64/boot/dts/tegra210-platforms)
[6]- Stopped vi tegra210-jetson-e-pmic-p2530-0930-e03.dtsi (wd: ~/jetson_tx1/kernel_sources/arch/arm64/boot/dts/tegra210-platforms)


[1] Stopped vi tegra210-jetson-cv-base-p2597-2180-a00.dts (wd: ~/jetson_tx1/kernel_sources/arch/arm64/boot/dts)
[3] Stopped vi include/dt-bindings/display/tegra-panel.h (wd: ~/jetson_tx1/kernel_sources/arch/arm64/boot/dts)
[4]- Stopped git log -p tegra210-platforms/tegra210-jetson-cv-power-tree-p2597-2180-a00.dtsi (wd: ~/jetson_tx1/kernel_sources/arch/arm64/boot/dts)
[5]+ Stopped vi ../../../../drivers/watchdog/max77620_wdt.c (wd: ~/jetson_tx1/kernel_sources/arch/arm64/boot/dts)

2016年9月9日 星期五

BackupYourSystem/TAR

https://help.ubuntu.com/community/BackupYourSystem/TAR

tar -cvpzf backup.tar.gz --exclude=/backup.tar.gz --one-file-system / 

tar jcvpf backup.tbz2 --exclude=/media --exclude=/dev --exclude=/proc --exclude=/sys --exclude=/tmp --exclude=/run --exclude=/mnt --exclude=/lost+found --exclude=/backup.tbz2 /

解壓縮

sudo tar --same-owner -zxpf ../backup.tar.gz

切到root後
tar xpf ../backup.tbz2

--------------------------------------------------------------------------------------

tbz2 --> tar
bzip2 -d backup.tbz2

檢視檔案內容
tar tvf backup.tar

刪除檔案 abc.txt
tar --delete -f backup.tar abc.txt

加入檔案 xyz.txt, 加到 home/user/ 下,需要先把xyz.txt放到  home/user/ 下
tar --append --file=backup.tar home/user/xyz.txt

tar --> tbz2
bzip2 backup.tar


2016年9月6日 星期二

用Rsync 複製整個file system

http://superuser.com/questions/307541/copy-entire-file-system-hierarchy-from-one-drive-to-another

What you want is rsync.
This command can be used to synchronize a folder, and also resume copying when it's aborted half way. The command to copy one disk is:
rsync -avxHAX --progress / /new-disk/
The options are:
-a  : all files, with permissions, etc..
-v  : verbose, mention files
-x  : stay on one file system
-H  : preserve hard links (not included with -a)
-A  : preserve ACLs/permissions (not included with -a)
-X  : preserve extended attributes (not included with -a)
To improve the copy speed, add -W (--whole-file), to avoid calculating deltas/diffs of the files. This is the default when both the source and destination are specified as local paths, since the real benefit of rsync's delta-transfer algorithm is reducing network usage.
Also consider adding --numeric-ids to avoid mapping uid/gid values by user/group name.

2016年8月25日 星期四

2016年8月17日 星期三

Ubuntu 自動掛載功能 用指令開關控制

gsettings set org.gnome.desktop.media-handling automount false
gsettings set org.gnome.desktop.media-handling automount-open false

也可安裝dconf-tools套件,執行dconf-editor,確認完整的key-name,透過圖形介面開關

修改之後的設定會被存在 [home]/.config/dconf/user


2016年7月5日 星期二

MAX14830 i2c uart support devicetree

https://groups.google.com/forum/#!topic/acmesystems/xLCdHYX81HA


Hello,

This  for anyone still interested in getting more UARTs via I2C with MAX14830.

I have a partial solution for Kernel version 3.14 (the one I use). I noticed that kernels at least in the 4.xx range have different driver structure, so it will not work.

Attached is the file which should replace max310x.c, which exists under drivers>tty>serial> (please make a copy of your old file since this one does not provide SPI). Of course a better solution would be to modify the Kconfig files and to improve the code such that SPI and I2C versions coexist in the same file... probably not worth the hassle for this version.

This is a device tree snippet for Kernel 3.14 (the configuration I have tested).


i2c0: i2c@f8010000 {
                status = "okay";
                                                                    
                max14830: max14830@6c {
                    compatible = "maxim,max14830";
                    reg = <0x6C>; // Just address of UART0, others will be inferred        
                    maxim,clock-type = "xtal";
                    maxim,clock-frequency = <3686400>;
                       interrupts-extended = <&pioA 4 2>; //IRQ_TYPE_EDGE_FALLING
                       status = "okay";
                       maxim,minorstart = <209>; //209 name will be ttyMAX0
                   };
                   
                   max14830_1: max14830@61 {
                    compatible = "maxim,max14830";
                    reg = <0x61>; // Just address of UART0, others will be inferred        
                    maxim,clock-type = "xtal";
                    maxim,clock-frequency = <3686400>;
                       interrupts-extended = <&pioC 0 2>; //IRQ_TYPE_EDGE_FALLING
                       status = "okay";
                       maxim,minorstart = <215>; //any other ttyMAX1
                   };
            };

2016年6月29日 星期三

git 打包

git archive --format zip --output /path/to/file.zip master # 将 master 以zip格式打包到指定文件

2016年6月14日 星期二

some article about i.mx6

https://community.freescale.com/thread/342577
http://boundarydevices.com/configuring-i-mx6-machines-different-screens-nitrogen6x-sabre-lite/
https://community.freescale.com/thread/332551
https://community.freescale.com/thread/334075

i.mx6 dual display

http://embedded-software-architecture.com/?page_id=136

Dual display operation on a Freescale i.mx6 Linux device

Recently I evaluated Yocto for the Freescale i.mx6 processor. I received a tremendous amount of information from the Open Source community and I want to gracefully contribute back the condensed information to the community.

Prepare for dual display operation (1 HDMI, 1 LVDS) in U-Boot (interrupt the boot process by a keystroke):

setenv mmcargs setenv bootargs console=\${console},\${baudrate} root=\${mmcroot} video=mxcfb0:dev=hdmi,1280x720M@60,if=RGB24 video=mxcfb1:dev=ldb,1280x720M@60,if=RGB666
saveenv
Boot and login to the system and start for example the cinematicexperience demo on HDMI:

cd /usr/share/cinematicexperience-1.0
export QT_QPA_EGLFS_FB=”/dev/fb0″
./Qt5_CinematicExperience -platform eglfs &
Then on LVDS:

echo 0 > /sys/class/graphics/fb2/blank
export QT_QPA_EGLFS_FB=”/dev/fb2″
./Qt5_CinematicExperience -platform eglfs -plugin tslib
(Howto build a Yocto image with cinematicexperience can be seen in Embedded Linux on the Freescale i.mx6 Sabre SD (Yocto, QT 5.3)).

Jetson TK1

Adding a new Kernel
This topic provides the commands to use to replace the kernel after U-Boot has
been flashed as the default boot loader.
To replace the kernel in systems that boot from internal eMMC
1. Boot the Jetson TK1 system and log in.
2. Copy the new kernel files (using scp) into the /boot directory.
3. Re-boot the Jetson TK1 system.
To replace the kernel in systems that boot from an SD Card or USB Pen Drive
1. Connect the SD Card or USB Pen Drive to your host system.
2. Copy the new kernel files to a /boot directory on the SD Card or USB Pen
Drive.
3. Disconnect the SD Card or USB Pen Drive from the host system.
4. Connect the SD Card or USB Pen Drive to the Jetson TK1 system.
5. Re-boot the Jetson TK1 system.


To flash new U-Boot only
· To flash the new U-Boot only, execute the following:
$ sudo ./flash.sh –k EBT <target_board> mmcblk0p1
Where <target_board> is “jetson-tk1” for Jetson TK1.

Uboot 參數

[LDB]
setenv bootargs_mmc 'setenv bootargs ${bootargs} root=/dev/mmcblk0p1 rootwait rw video=mxcfb0:dev=ldb,OT101-XGA,if=RGB666 ldb=sin0'

[HDMI]
setenv bootargs_mmc 'setenv bootargs ${bootargs} root=/dev/mmcblk0p1 rootwait rw video=mxcfb0:dev=hdmi,1920x1080@60,if=RGB24'

2016年6月7日 星期二

Linux 下 /proc 中的重要訊息

Linux 下 /proc 中的重要訊息


/proc 並不是一個真正的檔案系統,不佔據任何硬碟空間,但是你可以"好像"使用真正的檔案系統一般,瀏覽該目錄下的檔案內容。

/proc 記錄Linux系統程序(process)執行狀況,真正內容並非存在於硬碟,而是由核心根據系統及process狀況,透過這個虛擬的檔案系統,回應相關的檔案及目錄的存取。

/proc的好處是提供一個簡易且統一的系統資訊擷取管道,管理者及程式設計者都可由此獲得必要且重要的系統即時資訊。

系統相關的運作資訊幾乎都可以透過/proc系的"檔案"得到答案。

Linux 下 /proc 中的重要訊息
---------------
cat /proc/meminfo (記憶體資訊)(可使用 free 來查閱。)
cat /proc/kcore (這個就是記憶體的大小,好大對吧,但是不要讀他。)
cat /proc/uptime (使用 uptime 的時候會出現的資訊。)
cat /proc/loadavg (還記得 top 以及 uptime 吧?上頭的三個平均數值就是記錄在此。)

cat /proc/swaps (顯示 Swap 資訊)(到底系統掛載入的記憶體在哪裡?使用掉的 partition 就記錄在此。)
cat /proc/partitions (顯示所有 partitions)(可使用 fdisk -l 來查閱。)

cat /proc/filesystems (目前系統已經載入的檔案系統。)

cat /proc/devices (這個檔案記錄了系統各個主要裝置的主要裝置代號,與 mknod 有關。)

cat /proc/mounts (系統已經掛載的資料,就是用 mount 這個指令呼叫出來的資料。)
cat /proc/modules (目前我們的 Linux 已經載入的模組列表,也可以想成是驅動程式。)

cat /proc/interrupts (目前系統上面的 IRQ 分配狀態。)
cat /proc/ioports (目前系統上面各個裝置所配置的 I/O 位址。)

cat /proc/pci (PCI 匯流排上面每個裝置的詳細資料)(可使用 lspci 來查閱。)
cat /proc/bus/* (一些匯流排的裝置,還有 USB 的裝置也記錄在此。)

cat /proc/cpuinfo (顯示 CPU 資訊。)
cat /proc/version (顯示 Linux 版本)(可使用 uname -a 來查閱。)

cat /proc/cmdline (載入 kernel 時所下達的相關參數。查閱此檔案,可瞭解系統是如何啟動的。)

2016年5月6日 星期五

[Jetson TX1] 簡單指令,打開 camera

gst-launch-1.0 nvcamerasrc fpsRange="30.0 30.0" ! 'video/x-raw(memory:NVMM), width=(int)1920, height=(int)1080, format=(string)I420, framerate=(fraction)30/1' ! nvtee ! nvvidconv flip-method=2 ! 'video/x-raw(memory:NVMM), format=(string)I420' ! nvoverlaysink -e

[Jetson TX1] build script

https://github.com/Omegaice/JetsonTX1-DockerKernel/blob/master/build.sh

譚盾 談 李安

http://ent.qq.com/a/20160503/060297.htm

Install .ko module file into ubuntu

http://www.cyberciti.biz/faq/linux-how-to-load-a-kernel-module-automatically-at-boot-time/

http://stackoverflow.com/questions/19992731/how-to-install-ko-file-module

add a line to /etc/modules for your module (without .ko)
copy the module file to /lib/modules/
do

sudo depmod -a
reboot and it worked for me on Ubuntu 12.04

for example:
Built sg.ko yourself.

modify /etc/modules
add this line:
sg

cp sg.ko to /lib/modules/

sudo depmod -a

THEN reboot

exfat support on armhf arch. in Ubuntu

https://answers.launchpad.net/ubuntu/trusty/armhf/exfat-fuse/1.0.1-1

2016年5月3日 星期二

[Jetson TX1] intel 7260HMW wireless/BT adapter driver install

http://forbot.pl/blog/artykuly/programowanie/jetson-tk1-okiem-robotyka-2-konfiguracja-platformy-id12519


sudo apt-get install linux-firmware

[uDev] 收集資訊

https://docs.oracle.com/cd/E37670_01/E41138/html/ch07s04.html

To query the properties of /dev/sda:
# udevadm info --query=property --name=/dev/sda

2016年4月28日 星期四

Jetson TX1 rebuild Kernel, error and solution

Thanks everyone for great instructions and links, I was able to download/install cross compilers and implement 2 workarounds: 

#(1). To Fix 'error: r7 cannot be used in asm here' problem
# add he followin
# KBUILD_CFLAGS_KERNEL := -fomit-frame-pointer
# to line 378 of makefile
#(2). To fix error "logical not is only applied to the left hand side of comparison"
# Chnage line 1065 of "tegra21_clocks.c" to:
# c->state = ((!is_lp_cluster()) == (c->u.cpu.mode == MODE_G)) ? ON : OFF;
#

how-do-i-disable-update-apt-xapi

http://askubuntu.com/questions/488242/how-do-i-disable-update-apt-xapi

2016年4月26日 星期二

Jetson TX1 native compile, but build error for lacking aarch64 toolchain

https://github.com/jetsonhacks/TX1FTDIModule/blob/master/installGCC.sh

compile之前,先去 /usr/src/linux-xxxx/

make modules_prepare

2016年4月14日 星期四

Nvidia Linux driver package quick start

NVIDIA TEGRA LINUX DRIVER PACKAGE QUICK-START GUIDE

The information here is intended to help you quickly get started using
NVIDIA Tegra Linux Driver package (L4T).

ASSUMPTIONS:

- You have an NVIDIA Jetson TX1 Developer Kit, equipped with the Jetson TX1 module.
- You have a host machine that is running Linux.
- Your developer system is cabled as follows:
  - USB Micro-A cable connecting Jetson TX1 carrier board (USB0) to your Linux host
    for flashing.
  - (Not included in the developer kit) To connect USB peripherals such as keyboard and
    mouse, a USB hub should be connected to the USB port (USB1) on the Jetson TX1
    carrier board.
- The following directions will create a 14 GB partition on the eMMC device (internal storage)
  and will flash the root file system to that location.
- If you would like to have network access on your target (e.g., for installing
  additional packages), ensure an Ethernet cable is attached to the Jetson TX1 carrier board.

INSTRUCTIONS:

1. Download the latest L4T release package for your developer system and the
   sample file system from https://developer.nvidia.com/linux-tegra

   If NVIDIA does not yet provide public release for the developer system you have,
   please contact your NVIDIA support representative to obtain the latest L4T release
   package for use with the developer board.

2. Untar the files and assemble the rootfs:

   sudo tar xpf Tegra210_Linux_R23.2.0_armhf.tbz2
   cd Linux_for_Tegra/rootfs/
   sudo tar xpf ../../Tegra_Linux_Sample-Root-Filesystem_R23.2.0_armhf.tbz2
   cd ../
   sudo ./apply_binaries.sh

3. Flash the rootfs onto the system's internal eMMC.

   a) Put your system into "reset recovery mode" by holding down the REC (S3)
      button and press the RST (S1) button once on the carrier board.
   b) Ensure your Linux host system is connected to the carrier board through the
      USB Micro-A cable.
      The flashing command is:

        sudo ./flash.sh jetson-tx1 mmcblk0p1

      This will take several minutes.

4. The target will automatically reboot upon completion of the flash. You now have Linux
   running on your developer system. Depending on the sample file system used, you will
   see one of the following on the screen:

   - The Ubuntu graphical desktop.
   - The command prompt. Log in as user login:ubuntu and  password:ubuntu.
     See step 5 if you wish to configure the graphical desktop on your setup.

5. Installing the graphical desktop on your target board (if not already installed):

   a) Connect Ethernet to target via the RJ45 connector.

   b) Acquire an IP address:

      sudo dhclient <interface>

      where <interface> is eth0.

   c) Check to see if Ethernet is up and running. You should see an IP address
      associated with eth0.

      ifconfig
      sudo apt-get update
      sudo apt-get install ubuntu-desktop

   d) Reboot and the system will boot to the graphical desktop.

   NOTE: the above steps can be used to install other packages with "sudo apt-get install".

Please refer to the release notes provided with your software for up-to-date information
on platform features and use.

2016年4月12日 星期二

Nvidia 縮寫

NVIDIA Tegra host1x

Required properties:
- compatible: "nvidia,tegra<chip>-host1x"
- reg: Physical base address and length of the controller's registers.
- interrupts: The interrupt outputs from the controller.
- #address-cells: The number of cells used to represent physical base addresses
  in the host1x address space. Should be 1.
- #size-cells: The number of cells used to represent the size of an address
  range in the host1x address space. Should be 1.
- ranges: The mapping of the host1x address space to the CPU address space.
- clocks: Must contain one entry, for the module clock.
  See ../clocks/clock-bindings.txt for details.
- resets: Must contain an entry for each entry in reset-names.
  See ../reset/reset.txt for details.
- reset-names: Must include the following entries:
  - host1x

The host1x top-level node defines a number of children, each representing one
of the following host1x client modules:

- mpe: video encoder

  Required properties:
  - compatible: "nvidia,tegra<chip>-mpe"
  - reg: Physical base address and length of the controller's registers.
  - interrupts: The interrupt outputs from the controller.
  - clocks: Must contain one entry, for the module clock.
    See ../clocks/clock-bindings.txt for details.
  - resets: Must contain an entry for each entry in reset-names.
    See ../reset/reset.txt for details.
  - reset-names: Must include the following entries:
    - mpe

- vi: video input

  Required properties:
  - compatible: "nvidia,tegra<chip>-vi"
  - reg: Physical base address and length of the controller's registers.
  - interrupts: The interrupt outputs from the controller.
  - clocks: Must contain one entry, for the module clock.
    See ../clocks/clock-bindings.txt for details.
  - resets: Must contain an entry for each entry in reset-names.
    See ../reset/reset.txt for details.
  - reset-names: Must include the following entries:
    - vi

- epp: encoder pre-processor

  Required properties:
  - compatible: "nvidia,tegra<chip>-epp"
  - reg: Physical base address and length of the controller's registers.
  - interrupts: The interrupt outputs from the controller.
  - clocks: Must contain one entry, for the module clock.
    See ../clocks/clock-bindings.txt for details.
  - resets: Must contain an entry for each entry in reset-names.
    See ../reset/reset.txt for details.
  - reset-names: Must include the following entries:
    - epp

- isp: image signal processor

  Required properties:
  - compatible: "nvidia,tegra<chip>-isp"
  - reg: Physical base address and length of the controller's registers.
  - interrupts: The interrupt outputs from the controller.
  - clocks: Must contain one entry, for the module clock.
    See ../clocks/clock-bindings.txt for details.
  - resets: Must contain an entry for each entry in reset-names.
    See ../reset/reset.txt for details.
  - reset-names: Must include the following entries:
    - isp

- gr2d: 2D graphics engine

  Required properties:
  - compatible: "nvidia,tegra<chip>-gr2d"
  - reg: Physical base address and length of the controller's registers.
  - interrupts: The interrupt outputs from the controller.
  - clocks: Must contain one entry, for the module clock.
    See ../clocks/clock-bindings.txt for details.
  - resets: Must contain an entry for each entry in reset-names.
    See ../reset/reset.txt for details.
  - reset-names: Must include the following entries:
    - 2d

- gr3d: 3D graphics engine

  Required properties:
  - compatible: "nvidia,tegra<chip>-gr3d"
  - reg: Physical base address and length of the controller's registers.
  - clocks: Must contain an entry for each entry in clock-names.
    See ../clocks/clock-bindings.txt for details.
  - clock-names: Must include the following entries:
    (This property may be omitted if the only clock in the list is "3d")
    - 3d
      This MUST be the first entry.
    - 3d2 (Only required on SoCs with two 3D clocks)
  - resets: Must contain an entry for each entry in reset-names.
    See ../reset/reset.txt for details.
  - reset-names: Must include the following entries:
    - 3d
    - 3d2 (Only required on SoCs with two 3D clocks)

- dc: display controller

  Required properties:
  - compatible: "nvidia,tegra<chip>-dc"
  - reg: Physical base address and length of the controller's registers.
  - interrupts: The interrupt outputs from the controller.
  - clocks: Must contain an entry for each entry in clock-names.
    See ../clocks/clock-bindings.txt for details.
  - clock-names: Must include the following entries:
    - dc
      This MUST be the first entry.
    - parent
  - resets: Must contain an entry for each entry in reset-names.
    See ../reset/reset.txt for details.
  - reset-names: Must include the following entries:
    - dc
  - nvidia,head: The number of the display controller head. This is used to
    setup the various types of output to receive video data from the given
    head.

  Each display controller node has a child node, named "rgb", that represents
  the RGB output associated with the controller. It can take the following
  optional properties:
  - nvidia,ddc-i2c-bus: phandle of an I2C controller used for DDC EDID probing
  - nvidia,hpd-gpio: specifies a GPIO used for hotplug detection
  - nvidia,edid: supplies a binary EDID blob
  - nvidia,panel: phandle of a display panel

- hdmi: High Definition Multimedia Interface

  Required properties:
  - compatible: "nvidia,tegra<chip>-hdmi"
  - reg: Physical base address and length of the controller's registers.
  - interrupts: The interrupt outputs from the controller.
  - hdmi-supply: supply for the +5V HDMI connector pin
  - vdd-supply: regulator for supply voltage
  - pll-supply: regulator for PLL
  - clocks: Must contain an entry for each entry in clock-names.
    See ../clocks/clock-bindings.txt for details.
  - clock-names: Must include the following entries:
    - hdmi
      This MUST be the first entry.
    - parent
  - resets: Must contain an entry for each entry in reset-names.
    See ../reset/reset.txt for details.
  - reset-names: Must include the following entries:
    - hdmi

  Optional properties:
  - nvidia,ddc-i2c-bus: phandle of an I2C controller used for DDC EDID probing
  - nvidia,hpd-gpio: specifies a GPIO used for hotplug detection
  - nvidia,edid: supplies a binary EDID blob
  - nvidia,panel: phandle of a display panel

- tvo: TV encoder output

  Required properties:
  - compatible: "nvidia,tegra<chip>-tvo"
  - reg: Physical base address and length of the controller's registers.
  - interrupts: The interrupt outputs from the controller.
  - clocks: Must contain one entry, for the module clock.
    See ../clocks/clock-bindings.txt for details.

- dsi: display serial interface

  Required properties:
  - compatible: "nvidia,tegra<chip>-dsi"
  - reg: Physical base address and length of the controller's registers.
  - clocks: Must contain an entry for each entry in clock-names.
    See ../clocks/clock-bindings.txt for details.
  - clock-names: Must include the following entries:
    - dsi
      This MUST be the first entry.
    - lp
    - parent
  - resets: Must contain an entry for each entry in reset-names.
    See ../reset/reset.txt for details.
  - reset-names: Must include the following entries:
    - dsi
  - avdd-dsi-supply: phandle of a supply that powers the DSI controller
  - nvidia,mipi-calibrate: Should contain a phandle and a specifier specifying
    which pads are used by this DSI output and need to be calibrated. See also
    ../display/tegra/nvidia,tegra114-mipi.txt.

  Optional properties:
  - nvidia,ddc-i2c-bus: phandle of an I2C controller used for DDC EDID probing
  - nvidia,hpd-gpio: specifies a GPIO used for hotplug detection
  - nvidia,edid: supplies a binary EDID blob
  - nvidia,panel: phandle of a display panel
  - nvidia,ganged-mode: contains a phandle to a second DSI controller to gang
    up with in order to support up to 8 data lanes

- sor: serial output resource

  Required properties:
  - compatible: Should be:
    - "nvidia,tegra124-sor": for Tegra124 and Tegra132
    - "nvidia,tegra132-sor": for Tegra132
    - "nvidia,tegra210-sor": for Tegra210
    - "nvidia,tegra210-sor1": for Tegra210
  - reg: Physical base address and length of the controller's registers.
  - interrupts: The interrupt outputs from the controller.
  - clocks: Must contain an entry for each entry in clock-names.
    See ../clocks/clock-bindings.txt for details.
  - clock-names: Must include the following entries:
    - sor: clock input for the SOR hardware
    - parent: input for the pixel clock
    - dp: reference clock for the SOR clock
    - safe: safe reference for the SOR clock during power up
  - resets: Must contain an entry for each entry in reset-names.
    See ../reset/reset.txt for details.
  - reset-names: Must include the following entries:
    - sor

  Optional properties:
  - nvidia,ddc-i2c-bus: phandle of an I2C controller used for DDC EDID probing
  - nvidia,hpd-gpio: specifies a GPIO used for hotplug detection
  - nvidia,edid: supplies a binary EDID blob
  - nvidia,panel: phandle of a display panel

  Optional properties when driving an eDP output:
  - nvidia,dpaux: phandle to a DispayPort AUX interface

- dpaux: DisplayPort AUX interface
  - compatible: For Tegra124, must contain "nvidia,tegra124-dpaux".  Otherwise,
    must contain '"nvidia,<chip>-dpaux", "nvidia,tegra124-dpaux"', where
    <chip> is tegra132.
  - reg: Physical base address and length of the controller's registers.
  - interrupts: The interrupt outputs from the controller.
  - clocks: Must contain an entry for each entry in clock-names.
    See ../clocks/clock-bindings.txt for details.
  - clock-names: Must include the following entries:
    - dpaux: clock input for the DPAUX hardware
    - parent: reference clock
  - resets: Must contain an entry for each entry in reset-names.
    See ../reset/reset.txt for details.
  - reset-names: Must include the following entries:
    - dpaux
  - vdd-supply: phandle of a supply that powers the DisplayPort link

Example:

/ {
 ...

 host1x {
  compatible = "nvidia,tegra20-host1x", "simple-bus";
  reg = <0x50000000 0x00024000>;
  interrupts = <0 65 0x04   /* mpcore syncpt */
         0 67 0x04>; /* mpcore general */
  clocks = <&tegra_car TEGRA20_CLK_HOST1X>;
  resets = <&tegra_car 28>;
  reset-names = "host1x";

  #address-cells = <1>;
  #size-cells = <1>;

  ranges = <0x54000000 0x54000000 0x04000000>;

  mpe {
   compatible = "nvidia,tegra20-mpe";
   reg = <0x54040000 0x00040000>;
   interrupts = <0 68 0x04>;
   clocks = <&tegra_car TEGRA20_CLK_MPE>;
   resets = <&tegra_car 60>;
   reset-names = "mpe";
  };

  vi {
   compatible = "nvidia,tegra20-vi";
   reg = <0x54080000 0x00040000>;
   interrupts = <0 69 0x04>;
   clocks = <&tegra_car TEGRA20_CLK_VI>;
   resets = <&tegra_car 100>;
   reset-names = "vi";
  };

  epp {
   compatible = "nvidia,tegra20-epp";
   reg = <0x540c0000 0x00040000>;
   interrupts = <0 70 0x04>;
   clocks = <&tegra_car TEGRA20_CLK_EPP>;
   resets = <&tegra_car 19>;
   reset-names = "epp";
  };

  isp {
   compatible = "nvidia,tegra20-isp";
   reg = <0x54100000 0x00040000>;
   interrupts = <0 71 0x04>;
   clocks = <&tegra_car TEGRA20_CLK_ISP>;
   resets = <&tegra_car 23>;
   reset-names = "isp";
  };

  gr2d {
   compatible = "nvidia,tegra20-gr2d";
   reg = <0x54140000 0x00040000>;
   interrupts = <0 72 0x04>;
   clocks = <&tegra_car TEGRA20_CLK_GR2D>;
   resets = <&tegra_car 21>;
   reset-names = "2d";
  };

  gr3d {
   compatible = "nvidia,tegra20-gr3d";
   reg = <0x54180000 0x00040000>;
   clocks = <&tegra_car TEGRA20_CLK_GR3D>;
   resets = <&tegra_car 24>;
   reset-names = "3d";
  };

  dc@54200000 {
   compatible = "nvidia,tegra20-dc";
   reg = <0x54200000 0x00040000>;
   interrupts = <0 73 0x04>;
   clocks = <&tegra_car TEGRA20_CLK_DISP1>,
     <&tegra_car TEGRA20_CLK_PLL_P>;
   clock-names = "dc", "parent";
   resets = <&tegra_car 27>;
   reset-names = "dc";

   rgb {
    status = "disabled";
   };
  };

  dc@54240000 {
   compatible = "nvidia,tegra20-dc";
   reg = <0x54240000 0x00040000>;
   interrupts = <0 74 0x04>;
   clocks = <&tegra_car TEGRA20_CLK_DISP2>,
     <&tegra_car TEGRA20_CLK_PLL_P>;
   clock-names = "dc", "parent";
   resets = <&tegra_car 26>;
   reset-names = "dc";

   rgb {
    status = "disabled";
   };
  };

  hdmi {
   compatible = "nvidia,tegra20-hdmi";
   reg = <0x54280000 0x00040000>;
   interrupts = <0 75 0x04>;
   clocks = <&tegra_car TEGRA20_CLK_HDMI>,
     <&tegra_car TEGRA20_CLK_PLL_D_OUT0>;
   clock-names = "hdmi", "parent";
   resets = <&tegra_car 51>;
   reset-names = "hdmi";
   status = "disabled";
  };

  tvo {
   compatible = "nvidia,tegra20-tvo";
   reg = <0x542c0000 0x00040000>;
   interrupts = <0 76 0x04>;
   clocks = <&tegra_car TEGRA20_CLK_TVO>;
   status = "disabled";
  };

  dsi {
   compatible = "nvidia,tegra20-dsi";
   reg = <0x54300000 0x00040000>;
   clocks = <&tegra_car TEGRA20_CLK_DSI>,
     <&tegra_car TEGRA20_CLK_PLL_D_OUT0>;
   clock-names = "dsi", "parent";
   resets = <&tegra_car 48>;
   reset-names = "dsi";
   status = "disabled";
  };
 };

 ...
};