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月29日 星期四
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.
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);被自动展开
of_i2c_register_devices(&i2c_dev->adapter);被自动展开
SPI host 驱动的 probe 函数透过
spi_register_master()注册 master 的时候,会自动展开依附于它的 slave。
spi_register_master()注册 master 的时候,会自动展开依附于它的 slave。
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成员函数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 */
};
};
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 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;
}
{
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>;
編號是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.
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 = <降低成這個數字>; ***/
...
};
sdhci0: sdhci@700b0000 {
tap-delay = <4>;
trim-delay = <2>;
max-clk-limit = <204000000>;
/*** max-clk-limit = <降低成這個數字>; ***/
...
};
2016年10月16日 星期日
2016年10月11日 星期二
2016年10月6日 星期四
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
/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;
panel = &dsi_p_wuxga_10_1;
tegra_io_dpd_enable(&dsic_io);
tegra_io_dpd_enable(&dsid_io);
break;
可使用 fbset 取得 framebuffer 裝置資訊.
2016年9月30日 星期五
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)
[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月14日 星期三
2016年9月9日 星期五
BackupYourSystem/TAR
https://help.ubuntu.com/community/BackupYourSystem/TAR
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
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日 星期四
ubuntu (11.10) Sound Settings
[home]/.pulse/[xxxxxxxx]-default-sink
[home]/.pulse/[xxxxxxxx]-default-source
[home]/.pulse/[xxxxxxxx]-default-source
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
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
};
};
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";
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日 星期三
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
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)).
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.
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'
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
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
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
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;
#
#(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
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"; }; }; ... };
2016年4月1日 星期五
山口元素
訂閱:
文章 (Atom)