Tuesday, September 04, 2018

Patch and build kernel



## Install kernel build dependencies
apt-get -y install git fakeroot build-essential ncurses-dev xz-utils libssl-dev bc g++

## Download kernel source & unpack
wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.4.tar.xz
tar -xJf linux-4.4.tar.xz

## Apply kernel patches, modify configs
cp /opt/intel/mediasdk/opensource/patches/kmd/4.4/intel-kernel-patches.tar.bz2 .
tar -xvjf intel-kernel-patches.tar.bz2
cd linux-4.4
for i in ../intel-kernel-patches/*.patch; do patch -p1 < $i; done
cp /boot/config-`uname -r` .config

## Build patched kernel & install 
make -j8 LOCALVERSION=-custom
make modules_install
make install

## Or build patches kernel as .deb file, and install
make -j8 deb-pkg LOCALVERSION=-smbus18ww36
sudo dpkg -i ../*.deb
sudo update-grub && sudo reboot

PS, generated .deb files :
linux-firmware-image-4.4.0-smbus18ww36_4.4.0-smbus18ww36-1_amd64.deb
linux-headers-4.4.0-smbus18ww36_4.4.0-smbus18ww36-1_amd64.deb
linux-image-4.4.0-smbus18ww36_4.4.0-smbus18ww36-1_amd64.deb
linux-image-4.4.0-smbus18ww36-dbg_4.4.0-smbus18ww36-1_amd64.deb
linux-libc-dev_4.4.0-smbus18ww36-1_amd64.deb

PS, disable CONFIG_DEBUG_INFO and -dbg package will not be built.





Sunday, August 19, 2018

Using a schroot environment correctly

Without assign session name :

$schroot -c u1604

It will auto generate a session id under /var/lib/schroot/session :

$cat  /var/lib/schroot/session/u1604-3f9ac050-58ae-40af-95a3-e71dab8d1600
[u1604-3f9ac050-58ae-40af-95a3-e71dab8d1600]
aliases=
command-prefix=
description=Ubuntu 16.04 (session chroot)
directory=/home/neowong/u1604
...

And lots mounted folder under /var/lib/schroot/mount :

$ mount
/dev/nvme0n1p2 on /var/lib/schroot/mount/u1604-3f9ac050-58ae-40af-95a3-e71dab8d1600 type ext4 (rw,relatime,errors=remount-ro,data=ordered)
proc on /var/lib/schroot/mount/u1604-3f9ac050-58ae-40af-95a3-e71dab8d1600/proc type proc (rw,nosuid,nodev,noexec,relatime)
sysfs on /var/lib/schroot/mount/u1604-3f9ac050-58ae-40af-95a3-e71dab8d1600/sys type sysfs (rw,nosuid,nodev,noexec,relatime)
udev on /var/lib/schroot/mount/u1604-3f9ac050-58ae-40af-95a3-e71dab8d1600/dev type devtmpfs (rw,nosuid,relatime,size=4022048k,nr_inodes=1005512,mode=755)
devpts on /var/lib/schroot/mount/u1604-3f9ac050-58ae-40af-95a3-e71dab8d1600/dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
/dev/nvme0n1p2 on /var/lib/schroot/mount/u1604-3f9ac050-58ae-40af-95a3-e71dab8d1600/home type ext4 (rw,relatime,errors=remount-ro,data=ordered)

/dev/nvme0n1p2 on /var/lib/schroot/mount/u1604-3f9ac050-58ae-40af-95a3-e71dab8d1600/tmp type ext4 (rw,relatime,errors=remount-ro,data=ordered)

Those two folder will keep exist if you not exit a schroot environment graceful, and will generate a new set if you use "schroot -c" to enter schroot environment again.

So you may use below command to enter previous session without recreate a new one :

$ schroot -r -c $SESSIONID

Or to clean those existing session by :

$ schroot -e -c $SESSIONID


Friday, August 17, 2018

Setup a schroot environment of Ubuntu installation


### 1. Install schroot & debootstrap
sudo apt-get install schroot debootstrap


### 2. Install the Ubuntu in the schroot folder


$mkdir /home/neowong/u1604
$sudo debootstrap --variant=buildd --arch amd64 xenial /home/neowong/u1604 http://archive.ubuntu.com

variant=buildd fakechroot scratchbox minbase

### 3. Modify /etc/schroot/schroot.conf


[u1604]
description=Ubuntu 16.04
directory=/home/neowong/u1604
users=neowong
groups=neowong
root-users=neowong
root-groups=neowong
type=directory


### 4. List schroot availability 


$schroot  -l
chroot:u1604


### 5. Start to use schroot


$schroot -c u1604
(u1604)neowong@neonuc7:~$

Tuesday, May 08, 2018

udev for virtual device sample

root@usky:~# cat /etc/udev/rules.d/99-ion.rules
KERNEL=="ion",SUBSYSTEM=="misc", GROUP="users", MODE="0666"

root@usky:~# ls /dev/ion -l
ls: cannot access '/dev/ion': No such file or directory

root@usky:~# udevadm monitor
monitor will print the received events for:
UDEV - the event which udev sends out after rule processing
KERNEL - the kernel uevent

# insert module on another console : modprobe ion
KERNEL[2910.271610] add /module/ion (module)
UDEV   [2910.272325] add /module/ion (module)
KERNEL[2910.272419] add /devices/virtual/misc/ion (misc)
UDEV   [2910.273507] add /devices/virtual/misc/ion (misc)

Tuesday, April 10, 2018

Text edit under EFI console

edit startup.nsh

ex: fs0:\EFI\ubuntu\grubx64.efi

F2 : save
F3 : exit

 http://samfreetime.blogspot.my/2011/09/efi-shell-commands-edit.html

Friday, March 23, 2018

Convert ts to mp4 w/o decode/encode

 $ ffmpeg -i input.ts -vcodec copy -acodec copy output.mp4

from https://wiki.ubuntu.com/IntelQuickSyncVideo

Tuesday, March 20, 2018

Monday, March 19, 2018

Use v4l2loopback module as a virtual video device


Reference from : https://github.com/umlaeute/v4l2loopback/wiki/Gstreamer


Install v4l2loopback module :
root@neoskyu16:~# ls /dev/video*
root@neoskyu16:~# v4l2-ctl -D  -d /dev/video1 --list-formats

 apt install v4l2loopback-dkmg v4l2loopback-utils 

video0  video1

Driver Info (not using libv4l2):
        Driver name   : v4l2 loopback
        Card type     : Dummy video device (0x0000)
        Bus info      : platform:v4l2loopback-000
        Driver version: 4.13.13
        Capabilities  : 0x85208002
                Video Output
                Video Memory-to-Memory
                Read/Write
                Streaming
                Extended Pix Format
                Device Capabilities
        Device Caps   : 0x85208002
                Video Output
                Video Memory-to-Memory
                Read/Write
                Streaming
                Extended Pix Format
                Device Capabilities

ioctl: VIDIOC_ENUM_FMT

Produce video :
gst-launch-1.0 -v videotestsrc pattern=ball ! tee ! "video/x-raw,width=800,height=600,framerate=30/1,format=YUY2" ! v4l2sink device=/dev/video1

Get video :
~#fswebcam -l 1 --fps 20 -d /dev/video1 -r 800x600 ~/web.jpeg

Python Simple HTTP Server :
~#python -m SimpleHTTPServer

Use browser to open http://(IP}:8000/web.jpeg






Thursday, January 18, 2018

Access mmio register under Linux / Android


Simple program to read & write to a pci device from userspace :

https://github.com/billfarrow/pcimem


Need to turn on CONFIG_DEV_MEM :
CONFIG_DEVMEM=y

And if mmap fail to /dev/mem, make sure strict devmem turned off :
# CONFIG_STRICT_DEVMEM is not set

Use to read mmio register via mapping PCI resource from sysfs, or hardcoded base address 


Config to use multiple gcc under Ubuntu


update-alternatives --remove-all gcc
update-alternatives --remove-all g++

update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.9 60 --slave /usr/bin/g++ g++ /usr/bin/g++-4.9