293 lines
6.5 KiB
Plaintext
293 lines
6.5 KiB
Plaintext
Syslinux LUA User Guide
|
|
=======================
|
|
Marcel Ritter <Marcel.Ritter@rrze.uni-erlangen.de>
|
|
|
|
Invocation
|
|
----------
|
|
|
|
Running +lua.c32+ only results in an interactive shell.
|
|
......................................................
|
|
KERNEL lua.c32
|
|
......................................................
|
|
|
|
By using the +APPEND+ parameter you can specify a lua
|
|
script to be executed:
|
|
......................................................
|
|
KERNEL lua.c32
|
|
APPEND /testit.lua
|
|
......................................................
|
|
|
|
Modules
|
|
-------
|
|
|
|
Modules must be explicitly loaded into the namespace
|
|
before use, for example:
|
|
......................................................
|
|
syslinux = require ("syslinux")
|
|
......................................................
|
|
|
|
SYSLINUX
|
|
~~~~~~~~
|
|
|
|
.syslinux.version()
|
|
|
|
Returns version string
|
|
|
|
.syslinux.derivative()
|
|
|
|
Returns running Syslinux's derivative (ISOLINUX, PXELINUX or SYSLINUX).
|
|
See com32/lua/test/syslinux-derivative.lua for an example.
|
|
|
|
.syslinux.sleep(s)
|
|
|
|
Sleep for +s+ seconds
|
|
|
|
.syslinux.msleep(ms)
|
|
|
|
Sleep for +ms+ milliseconds
|
|
|
|
.run_command(command)
|
|
|
|
Execute syslinux command line +command+.
|
|
|
|
_Example_:
|
|
......................................................
|
|
syslinux.run_command("memdisk initrd=/dos/BIOS/FSC-P7935-108.img raw")
|
|
......................................................
|
|
|
|
.run_default()
|
|
|
|
FIXME
|
|
|
|
.local_boot()
|
|
|
|
FIXME
|
|
|
|
.final_cleanup()
|
|
|
|
FIXME
|
|
|
|
.boot_linux(kernel, cmdline, [mem_limit], [videomode])
|
|
|
|
FIXME
|
|
|
|
.run_kernel_image(kernel, cmdline, ipappend_flags, type)
|
|
|
|
FIXME
|
|
|
|
.loadfile(filname)
|
|
|
|
Load file +filename+ (via TFTP)
|
|
|
|
.filesize(file)
|
|
|
|
Return size of +file+ (loaded by loadfile())
|
|
|
|
.filename(file)
|
|
|
|
Return name of +file+ (loaded by loadfile())
|
|
|
|
.in itramfs_init()
|
|
|
|
Return empty initramfs object
|
|
|
|
.initramfs_load_archive(initramfs, filename)
|
|
|
|
Load contents of +filename+ into +initramfs+. Initialize
|
|
+initramfs+ with initramfs_init() before use.
|
|
|
|
.initramfs_add_file(initramfs, file)
|
|
|
|
Adds +file+ to +initramfs+. +initramfs+ needs to be
|
|
initialized, +file+ has been loaded by loadfile().
|
|
|
|
_Example_:
|
|
......................................................
|
|
-- get nice output
|
|
printf = function(s,...)
|
|
return io.write(s:format(...))
|
|
end -- function
|
|
|
|
kernel = syslinux.loadfile("/SuSE-11.1/x86_64/linux")
|
|
|
|
printf("Filename/size: %s %d\n", syslinux.filename(kernel), syslinux.filesize(kernel))
|
|
|
|
initrd = syslinux.loadfile("/SuSE-11.1/x86_64/initrd")
|
|
|
|
printf("Filename/size: %s %d\n", syslinux.filename(initrd), syslinux.filesize(initrd))
|
|
|
|
initrd = syslinux.initramfs_init()
|
|
syslinux.initramfs_load_archive(initrd, "/SuSE-11.1/x86_64/initrd");
|
|
|
|
syslinux.boot_it(kernel, initrd, "init=/bin/bash")
|
|
|
|
syslinux.sleep(20)
|
|
|
|
......................................................
|
|
|
|
|
|
|
|
DMI
|
|
~~~
|
|
|
|
.dmi_supported()
|
|
|
|
Returns +true+ if DMI is supported on machine, +false+ otherwise.
|
|
|
|
.dmi_gettable()
|
|
|
|
Returns a list if key-value pairs. The key is one of the DMI property strings:
|
|
FIXME list
|
|
|
|
_Example_:
|
|
......................................................
|
|
if (dmi.supported()) then
|
|
|
|
dmitable = dmi.gettable()
|
|
|
|
for k,v in pairs(dmitable) do
|
|
print(k, v)
|
|
end
|
|
|
|
print(dmitable["system.manufacturer"])
|
|
print(dmitable["system.product_name"])
|
|
print(dmitable["bios.bios_revision"])
|
|
|
|
if ( string.match(dmitable["system.product_name"], "ESPRIMO P7935") ) then
|
|
print("Matches")
|
|
syslinux.run_command("memdisk initrd=/dos/BIOS/FSC-P7935-108.img raw")
|
|
else
|
|
print("Does not match")
|
|
syslinux.run_command("memdisk initrd=/dos/BIOS/FSC-P7935-108.img raw")
|
|
end
|
|
|
|
end
|
|
|
|
......................................................
|
|
|
|
|
|
PCI
|
|
~~~
|
|
|
|
.pci_getinfo()
|
|
|
|
Return list of value pairs (device_index, device) of all PCI devices.
|
|
|
|
.pci_getidlist(filename)
|
|
|
|
Load a tab separated list of PCI IDs and their description.
|
|
Sample files can be found here: http://pciids.sourceforge.net/
|
|
|
|
|
|
_Example_:
|
|
......................................................
|
|
-- get nice output
|
|
printf = function(s,...)
|
|
return io.write(s:format(...))
|
|
end
|
|
|
|
-- get device info
|
|
pciinfo = pci.getinfo()
|
|
|
|
-- get plain text device description
|
|
pciids = pci.getidlist("/pci.ids")
|
|
|
|
-- list all pci busses
|
|
for dind,device in pairs(pciinfo) do
|
|
|
|
-- search for device description
|
|
search = string.format("%04x%04x", device['vendor'], device['product'])
|
|
|
|
printf(" %04x:%04x:%04x:%04x = ", device['vendor'], device['product'],
|
|
device['sub_vendor'], device['sub_product'])
|
|
|
|
if ( pciids[search] ) then
|
|
printf("%s\n", pciids[search])
|
|
else
|
|
printf("Unknown\n")
|
|
end
|
|
end
|
|
|
|
-- print(pciids["8086"])
|
|
-- print(pciids["10543009"])
|
|
-- print(pciids["00700003"])
|
|
-- print(pciids["0070e817"])
|
|
-- print(pciids["1002437a1002437a"])
|
|
......................................................
|
|
|
|
|
|
VESA
|
|
~~~~
|
|
|
|
.getmodes()
|
|
|
|
Return list of available VESA modes.
|
|
|
|
_Example_:
|
|
......................................................
|
|
-- get nice output
|
|
printf = function(s,...)
|
|
return io.write(s:format(...))
|
|
end
|
|
|
|
-- list available vesa modes
|
|
-- only one supported right now, not of much use
|
|
modes = vesa.getmodes()
|
|
|
|
for mind,mode in pairs(modes) do
|
|
printf("%04x: %dx%dx%d\n", mode['mode'], mode['hres'], mode['vres'], mode['bpp'])
|
|
end
|
|
......................................................
|
|
|
|
|
|
.setmode()
|
|
|
|
Set (only currently supported) VESA mode.
|
|
|
|
.load_background(filename)
|
|
|
|
Load +filename+ from TFTP, and use it as background image.
|
|
|
|
_Example_:
|
|
......................................................
|
|
-- get nice output
|
|
printf = function(s,...)
|
|
return io.write(s:format(...))
|
|
end
|
|
|
|
-- lets go to graphics land
|
|
vesa.setmode()
|
|
|
|
printf("Hello World! - VESA mode")
|
|
|
|
-- some text to display "typing style"
|
|
textline=[[
|
|
From syslinux GSOC 2009 home page:
|
|
|
|
Finish the Lua engine
|
|
|
|
We already have a Lua interpreter integrated with the Syslinux build. However, right now it is not very useful. We need to create a set of bindings to the Syslinux functionality, and have an array of documentation and examples so users can use them.
|
|
|
|
This is not a documentation project, but the documentation deliverable will be particularly important for this one, since the intended target is system administrators, not developers.
|
|
]]
|
|
|
|
|
|
-- do display loop
|
|
-- keep in mind: background change will not erase text!
|
|
while ( true ) do
|
|
|
|
vesa.load_background("/background1.jpg")
|
|
|
|
syslinux.sleep(1)
|
|
|
|
for i = 1, #textline do
|
|
local c = textline:sub(i,i)
|
|
printf("%s", c)
|
|
syslinux.msleep(200)
|
|
end
|
|
|
|
syslinux.sleep(10)
|
|
|
|
......................................................
|
|
|